nginx

一. Nginx是什么

1. 轻量级的web服务器
2. 反向代理服务器
3. 电子邮件代理服务器

二. 特性

1、高并发连接:官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数。
2、内存消耗少:在3万并发连接下,开启的10个Nginx 进程才消耗150M内存(15M*10=150M)。
3、配置文件非常简单:风格跟程序一样通俗易懂。
4、成本低廉:Nginx为开源软件,可以免费使用。而购买F5 BIG-IP、NetScaler等硬件负载均衡交换机则需要十多万至几十万人民币。
5、支持的概率微乎其微。
Rewrite重写规则:能够根据域名、URL的不同,将 HTTP 请求分到不同的后端服务器群组。
6、内置的健康检查功能:如果 Nginx Proxy 后端的某台 Web 服务器宕机了,不会影响前端访问。
7、节省带宽:支持 GZIP 压缩,可以添加浏览器本地缓存的 Header 头。
8、稳定性高:用于反向代理,宕机

三. 安装

1. windows
1)准备的软件:nginx-1.4.1.zip
2)绿色软件,解压后无需安装
3)在cmd下进入相应路径直接运行nginx.exe命令即可。

2. Linux
1)准备的软件:nginx-1.3.10.tar.gz   pcre-8.34.tar.gz(rewrite用) zlib-1.2.8.tar.gz(gzip用)
需要预装make、gcc、openssl、openssl-devel

2)安装pcre
#cd /usr/local/src
#wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.34.tar.gz 
#tar -zxvf pcre-8.34.tar.gz
#cd pcre-8.34
#./configure
#make
#make install

3)安装zlib库
#cd /usr/local/src
#wget http://zlib.net/zlib-1.2.8.tar.gz
#tar -zxvf zlib-1.2.8.tar.gz
#cd zlib-1.2.8
#./configure
#make
#make install

4)编译安装nginx
#cd /usr/local/src
#wget http://nginx.org/download/nginx-1.4.4.tar.gz
#tar -zxvf nginx-1.4.4.tar.gz
#cd nginx-1.4.4

./configure --with-http_ssl_module --with-pcre=../pcre-8.34 --with-zlib=../zlib-1.2.8
#make
#make install
默认安装在/usr/local/nginx下


• --prefix=path    定义一个目录,存放服务器上的文件 ,也就是nginx的安装目录。默认使用 /usr/local/nginx
• --sbin-path=path 设置nginx的可执行文件的路径,默认为prefix/sbin/nginx.
• --conf-path=path  设置在nginx.conf配置文件的路径。nginx允许使用不同的配置文件启动,通过命令行中的-c选项。默认为prefix/conf/nginx.conf.
• --pid-path=path  设置nginx.pid文件,将存储的主进程的进程号。安装完成后,可以随时改变的文件名 , 在nginx.conf配置文件中使用 PID指令。默认为prefix/logs/nginx.pid.
• --error-log-path=path 设置主错误,警告,和诊断文件的名称。安装完成后,可以随时改变的文件名 ,在nginx.conf配置文件中 使用 的error_log指令。默认为prefix/logs/error.log.
• --http-log-path=path  设置主请求的HTTP服务器的日志文件的名称。安装完成后,可以随时改变的文件名 ,在nginx.conf配置文件中 使用 的access_log指令。默认为prefix/logs/access.log.
• --user=name  设置nginx工作进程的用户。安装完成后,可以随时更改的名称在nginx.conf配置文件中 使用的 user指令。默认的用户名是nobody
• --group=name  设置nginx工作进程的用户组。安装完成后,可以随时更改的名称在nginx.conf配置文件中 使用的 user指令。默认的为非特权用户
• --with-select_module --without-select_module 启用或禁用构建一个模块来允许服务器使用select()方法。该模块将自动建立,如果平台不支持的kqueue,epoll,rtsig或/dev/poll。
• --with-poll_module --without-poll_module 启用或禁用构建一个模块来允许服务器使用poll()方法。该模块将自动建立,如果平台不支持的kqueue,epoll,rtsig或/dev/poll。
• --without-http_gzip_module — 不编译压缩的HTTP服务器的响应模块。编译并运行此模块需要zlib库。
• --without-http_rewrite_module  不编译重写模块。编译并运行此模块需要PCRE库支持。
• --without-http_proxy_module — 不编译http_proxy模块。
• --with-http_ssl_module — 使用https协议模块。默认情况下,该模块没有被构建。建立并运行此模块的OpenSSL库是必需的。
• --with-pcre=path — 设置PCRE库的源码路径。PCRE库的源码(版本4.4 - 8.30)需要从PCRE网站下载并解压。其余的工作是Nginx的./ configure和make来完成。正则表达式使用在location指令和 ngx_http_rewrite_module 模块中。
• --with-pcre-jit —编译PCRE包含“just-in-time compilation”(1.1.12中, pcre_jit指令)。
• --with-zlib=path —设置的zlib库的源码路径。要下载从 zlib(版本1.1.3 - 1.2.5)的并解压。其余的工作是Nginx的./ configure和make完成。ngx_http_gzip_module模块需要使用zlib 。
• --with-cc-opt=parameters — 设置额外的参数将被添加到CFLAGS变量。例如,当你在FreeBSD上使用PCRE库时需要使用:--with-cc-opt="-I /usr/local/include。.如需要需要增加 select()支持的文件数量:--with-cc-opt="-D FD_SETSIZE=2048".
• --with-ld-opt=parameters —设置附加的参数,将用于在链接期间。例如,当在FreeBSD下使用该系统的PCRE库,应指定:--with-ld-opt="-L /usr/local/lib".

详情参考:http://www.nginx.cn/install

四. 常用命令

1. 启动
sbin/nginx   -c usr/local/nginx/conf/nginx.conf

2. 停止
sbin/nginx –s stop

3. 热启动
sbin/nginx   -s  reload

4. 检查配置文件
sbin/nginx   -t
如果屏幕显示以下两行信息,说明配置文件正确:
the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
the configuration file /usr/local/nginx/conf/nginx.conf was tested successfully

五. 配置(conf/nginx.conf)

nginx.conf文件结构

…………
events{
………………..
}
http{
…………….
       server{
          ………………..
       }
……………….
}

1)头部
#user nobody;
#指定使用的用户
worker_processes 1;
#开启的进程数,一般设置1-5
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#定义错误日志,以及记录的日志等级
#pid logs/nginx.pid;
#定义pid文件位置


2)events
events {
 use ;
         #Nginx支持如下处理连接的方法(I/O复用方法),这些方法可以通过use指令指定
# use [ kqueue | rtsig | epoll | select | poll ];


         #每个进程最大连接数(最大连接=连接数x进程数) 
#worker_connections 51200; 
 } 


3)http
①压缩:
Nginx使用gzip压缩技术,这种技术可以压缩文件至原来的30%甚至更小。IE、FireFox、Opera、Chrome等大多浏览器都支持解析gzip过的页面.


http{

    gzip on;
    gzip_min_length 1k;
    gzip_buffer 4 16k;
    gzip_http_version 1.1;
    gzip_comp_level 2;
    gzip_types text/plain application/x-javascript text/css application/xml;
    gzip_vary on;#accpet_encoding gzip

}


②虚拟主机
把一台运行在因特网上的服务器主机划分成多“虚拟”的主机。每个虚拟主机都具有独立的域名和Internet服务器(WWW,FTP,EMAIL)功能。利用虚拟主机,不用为每个要运行的网站提供一台单独的Nginx服务器或单独运行一组Nginx进程。虚拟主机提供了在同一台服务器上、同一组Nginx进程上运行多个网站的功能。
每段server{…}就是一个虚拟主机,如果要配置多个虚拟主机,只需配置多个server{…}段即可。
a. 基于配置IP的虚拟主机
server_name 192.168.8.43; 
b. 基于配置域名的虚拟主机
server_name sub.mygogo.com;


②负载均衡
nginx的upstream目前支持4种方式的分配
a、轮询(默认)  每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
b、weight  指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
c、ip_hash  每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
d、fair(第三方)  按后端服务器的响应时间来分配请求,响应时间短的优先分配。


upstream backend{#定义一组反向代理/负载均衡后端服务器池
      server 127.0.0.1:9090 down; 
      server 192.168.1.12:8080 weight=2 ;
      server 192.168.1.13:6060 max_fails=3 fail_timeout=30s;
      server 1192.168.1.14:7070 backup;
}
upstream bbs_server_pool {#定义一组反向代理/负载均衡后端服务器池
   server   192.168.1.15:80 weight=1 max_fails=2 fail_timeout=30s;
   server   192.168.1.16:80 weight=1 max_fails=2 fail_timeout=30s;
   server   192.168.1.17:80 weight=1 max_fails=2 fail_timeout=30s;
   server   192.168.1.18:80 weight=1 max_fails=2 fail_timeout=30s;
 } 


server{
   listen 80;
   server_name  bbs.yourdomain.com *.bbs.yourdomain.com;
   location /
   {
         proxy_pass http://bbs_server_pool; #用于指定反向代理的服务器池。
         proxy_set_header Host  $host; #当后端Web服务器上也配置有多个虚拟主机时,需要用该Header来区分反向代理哪个主机名。
         proxy_set_header X-Forwarded-For  $remote_addr; #如果后端Web服务器上的程序需要获取用户IP,请从该Header头获取。
   }
   access_log off;
 }


Upstream可对后端服务器进行健康检查。
a)    down 表示当前的server暂时不参与负载
b)    weight 默认为1.weight越大,负载的权重就越大。
c)    max_fails :在fail_timeout时间内对后台服务器请求失败的次数 
d)   fail_timeout:max_fails次失败后,暂停的时间。
e)    backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。  

原文地址:https://www.cnblogs.com/waterystone/p/5085275.html