欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

nginx服务器

程序员文章站 2022-06-11 16:21:06
...

nginx服务器

Nginx服务器(engine-X),是一种web服务器。它是一种开源的高性能HTTP和反向代理服务器。 它也可提供IMAP/POP3/SMTP代理服务等功能。

**Nginx是以多进程的方式来工作的。**也支持多线程的方式,只是主流的方式还是多进程的方式,也是Nginx的默认方式。

Nginx启动后,它在Unix系统中会以daemon的方式在后台运行,后台进程包含一个master进程和多个worker进程。

master进程主要用来管理worker进程,包含:接收来自外界的信号,向各worker进程发送信号,监控worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程。

而基本的网络事件,则是放在worker进程中来处理了。多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。

一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。worker进程的个数是可以设置的,一般我们会设置与机器cpu核数一致。

优点

  1. 高并发连接

    官方测试能支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数。Nginx服务器专为性能优化而开发。它支持内核Poll模型,能经受高负载的考验。

  2. 内存消耗少

    Nginx服务器采取了分阶段资源分配技术,这使得它的CPU与内存占用率非常低。

  3. 配置文件简单

  4. 成本低 : Nginx服务器是开源软件。

  5. 支持Rewrite重写规则

    能根据域名、URL的不同,将 HTTP 请求分到不同的后端服务器群组。

  6. 内置的健康检查功能.

    若 Nginx服务器 Proxy 后端的某台 Web 服务器宕机,不会影响前端访问。

  7. 节省带宽.

    支持 GZIP 压缩,可以添加浏览器本地缓存的 Header 头。

  8. 稳定性高.

    Nginx服务器的稳定性很高。其它HTTP服务器在遇到访问峰值,或有人恶意发起慢速连接时,很可能会导致服务器物理内存耗尽,频繁交换,失去响应(只能重启服务器)。

    另外, Nginx服务器采用master-slave模型,能充分利用SMP的优势,且能减少工作进程在磁盘I/O的阻塞延迟。

    Nginx服务器代码质量很高,很规范, 模块扩展也很容易。Nginx服务器采用了一些os提供的最新特性如对sendfile (Linux2.2+),accept-filter(FreeBSD4.1+),TCP_DEFER_ACCEPT (Linux 2.4+)的支持,从而大大提高了性能。

Nginx和Apache的区别

相同点:

  • 都是HTTP服务器软件;

  • 功能实现上都采用模块化结构设计;

  • 都支持通用的语言接口(如PHP、Perl、Python);

  • 都支持正、反向代理,虚拟主机,URL重写,压缩传输,SSL加密传输等;

差别:

  • Apache处理速度较慢,且占用很多内存资源,而Nginx服务器却相反;

  • 在功能实现上,Apache的所有模块都支持动、静态编译,而Nginx服务器模块都是静态编译的;

  • 在处理连接方式上,Nginx支持epoll,而Apache不支持;

  • Nginx服务器安装包很小,只有几百KB;

安装Nginx

  1. Linux下yum安装
  • 产生yum配置文件/etc/yum.repos.d/nginx.repo

  • 编写如下内容:

[nginx]

name=nginx repo

baseurl=http://nginx.org/packages/OS/OSRELEASE/$basearch/

gpgcheck=0

enabled=1

其中OS可以选择:“rhel” or “centos”

OSRELEASE,选择6,或者7即可。

  • yum install nginx就可以安装了。
  1. Linux下源码安装

    Nginx有模块依赖性,需要依赖下面3个包,才能源码编译安装。

    • gzip 模块需要zlib库

    • rewrite 模块需要pcre库

    • ssl 功能需要openssl库

Nginx的配置文件结构

nginx.conf由多个块组成。最外面的一块是main,main包含events和http,http包含多个upstream和多个server,server又包含多个location块:

![img](file:///C:\Users\john\AppData\Local\Temp\ksohtml\wps8D17.tmp.jpg)

main(全局设置)、server(虚拟主机设置)、upstream(负载均衡服务器设置)和 location(URL匹配特定位置的设置)。

Ø main块设置的指令将影响其他所有设置;

Ø server块的指令主要用于指定主机和端口,以及网站路径;

Ø upstream指令主要用于负载均衡,设置一系列的后端服务器;

Ø location块用于匹配网页位置;

这四者之间的关系:server继承main,location继承server,upstream既不会继承其他设置也不会被继承。

Nginx的全局配置
#指定使用的用户和组  

#user  nginx nginx;  

#启动进程,通常设置成和cpu的数量相等  

worker_processes  1;  


#全局错误日志  

#error_log  logs/error.log;  

#error_log  logs/error.log  notice;  

#error_log  logs/error.log  info;  


#PID文件--存放进程号的文件  

#pid  logs/nginx.pid;  
events配置
#工作模式及连接数上限  

events {  

#单个后台worker process进程的最大并发链接数  

worker_connections  1024;  

#并发总数是 worker_processes 和 worker_connections 的乘积  


#Nginx服务器支持如下处理连接的方法(I/O复用方法),这些方法可以通过 use指令指定.    

#use [ kqueue | rtsig | epoll | /dev/poll | select | poll];    


use epoll;  #使用 epoll(linux2.6的性能方式 )  

}  

注意: 服务器为linux时, 请用use epoll。 利用linux的内核提供性能优化方案。

http配置

http {  

#Nginx服务器对HTTP服务器相关属性的配置  

include mime.types;  

default_type  application/octet-stream;  

#设定虚拟主机配置     

server {  

#侦听80端口  

listen  80;  

#定义使用 www.itsource.cn访问  

server_name  www.itsource.cn;  

location  {  

}  

location  {  

 }..  

 }  

server {  

#侦听80端口  

listen  80;  

#定义使用 www.example.cn访问  

server_name  www.example.cn;  

location  {  

}  

location  {  

}..  

   }  

}  
  1. include是个主模块指令。它实现对配置文件所包含的文件的设定,以减少主配置文件的复杂度。

  2. default_type属于HTTP核心模块指令. 这里设定默认类型为二进制流,也就是当文件类型未定义时使用这种方式。

  3. server块的指令主要用于指定主机和端口(虚拟主机).

  4. location部分主要用于匹配网页位置,设置不同的功能特征. 比如:缓存,重定向等…

什么是反向代理?

当以代理服务器来接受网络上的连接请求,再将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给网络上发出请求的客户端时,代理服务器对外就表现为一个反向代理服务器.