nginx基本配置,参数说明和启动,停止,重启

1:序言

Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的。从2004年发布至今,凭借开源的力量,已经接近成熟与完善。

Nginx功能丰富,可作为HTTP服务器,也可作为反向代理服务器,邮件服务器。支持FastCGI、SSL、Virtual Host、URL Rewrite、Gzip等功能。并且支持很多第三方的模块扩展。

Nginx的稳定性、功能集、示例配置文件和低系统资源的消耗让他后来居上,在全球活跃的网站中有12.18%的使用比率,大约为2220万个网站。

牛逼吹的差不多啦,如果你还不过瘾,你可以百度百科或者一些书上找到这样的夸耀,比比皆是。

2:Nginx常用功能

1:Http代理,反向代理:作为web服务器最常用的功能之一,尤其是反向代理

这里我给来2张图,对正向代理与反响代理做个诠释,具体细节,大家可以翻阅下资料。

nginx基本配置,参数说明和启动,停止,重启
Nginx在做反向代理时,提供性能稳定,并且能够提供配置灵活的转发功能。Nginx可以根据不同的正则匹配,采取不同的转发策略,比如图片文件结尾的走文件服务器,动态页面走web服务器,只要你正则写的没问题,又有相对应的服务器解决方案,你就可以随心所欲的玩。并且Nginx对返回结果进行错误页跳转,异常判断等。如果被分发的服务器存在异常,他可以将请求重新转发给另外一台服务器,然后自动去除异常服务器。

2:负载均衡

Nginx提供的负载均衡策略有2种:内置策略和扩展策略。内置策略为轮询,加权轮询,Ip hash。扩展策略,就天马行空,只有你想不到的没有他做不到的啦,你可以参照所有的负载均衡算法,给他一一找出来做下实现。

上3个图,理解这三种负载均衡算法的实现

nginx基本配置,参数说明和启动,停止,重启

Ip hash算法,对客户端请求的ip进行hash操作,然后根据hash结果将同一个客户端ip的请求分发给同一台服务器进行处理,可以解决session不共享的问题。

nginx基本配置,参数说明和启动,停止,重启

3:web缓存

Nginx可以对不同的文件做不同的缓存处理,配置灵活,并且支持FastCGI_Cache,主要用于对FastCGI的动态程序进行缓存。配合着第三方的ngx_cache_purge,对制定的URL缓存内容可以的进行增删管理。

4:Nginx相关地址

源码:https://trac.nginx.org/nginx/browser

官网:http://www.nginx.org/

3:Nginx配置文件结构

如果你下载好啦,你的安装文件,不妨打开conf文件夹的nginx.conf文件,Nginx服务器的基础配置,默认的配置也存放在此。

在nginx.conf的注释符号位#

nginx文件的结构,这个对刚入门的同学,可以多看两眼。

默认的config 

[html] view plain copy
  1. ########### 每个指令必须有分号结束。#################  
  2. #user administrator administrators;  #配置用户或者组,默认为nobody nobody。  
  3. #worker_processes 2;  #允许生成的进程数,默认为1  
  4. #pid /nginx/pid/nginx.pid;   #指定nginx进程运行文件存放地址  
  5. error_log log/error.log debug;  #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg  
  6.   
  7. #工作模式及连接数上限  
  8.   
  9. events {   
  10.     #epoll是多路复用IO(I/O Multiplexing)中的一种方式,   
  11.     #仅用于linux2.6以上内核,可以大大提高nginx的性能   
  12.     use epoll;#事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport   
  13.     #单个后台worker process进程的最大并发链接数   
  14.     worker_connections 1024;  
  15.   
  16.     accept_mutex on;   #设置网路连接序列化,防止惊群现象发生,默认为on  
  17.     multi_accept on;  #设置一个进程是否同时接受多个网络连接,默认为off  
  18.   
  19.   
  20.     # 并发总数是 worker_processes 和 worker_connections 的乘积   
  21.     # 即 max_clients = worker_processes * worker_connections   
  22.     # 在设置了反向代理的情况下,max_clients = worker_processes * worker_connections / 4   
  23.     # 为什么上面反向代理要除以4,应该说是一个经验值   
  24.     # 根据以上条件,正常情况下的Nginx Server可以应付的最大连接数为:4 * 8000 = 32000   
  25.     # worker_connections 值的设置跟物理内存大小有关   
  26.     # 因为并发受IO约束,max_clients的值须小于系统可以打开的最大文件数   
  27.     # 而系统可以打开的最大文件数和内存大小成正比,一般1GB内存的机器上可以打开的文件数大约是10万左右   
  28.     # 我们来看看360M内存的VPS可以打开的文件句柄数是多少:   
  29.     # $ cat /proc/sys/fs/file-max # 输出 34336 # 32000 < 34336,  
  30.     # 即并发连接总数小于系统可以打开的文件句柄总数,这样就在操作系统可以承受的范围之内   
  31.     # 所以,worker_connections 的值需根据 worker_processes   
  32.     # 进程数目和系统可以打开的最大文件总数进行适当地进行设置   
  33.     # 使得并发总数小于操作系统可以打开的最大文件数目   
  34.     # 其实质也就是根据主机的物理CPU和内存进行配置   
  35.     # 当然,理论上的并发总数可能会和实际有所偏差,因为主机还有其他的工作进程需要消耗系统资源。   
  36.     # ulimit -SHn 65535}  
  37.     http {   
  38.       #设定mime类型,类型由mime.type文件定义   
  39.       include mime.types;   
  40.      default_type application/octet-stream;   
  41.      #设定日志格式   
  42.      log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';   
  43.      access_log logs/access.log main;   
  44.      #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,   
  45.      #对于普通应用,必须设为 on,   
  46.      #如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,   
  47.      #以平衡磁盘与网络I/O处理速度,降低系统的uptime.   
  48.      sendfile on;   
  49.      #tcp_nopush on;   
  50.      #连接超时时间   
  51.      #keepalive_timeout 0;   
  52.      keepalive_timeout 65;   
  53.      tcp_nodelay on;   
  54.      #开启gzip压缩 gzip on;   
  55.      gzip_disable "MSIE [1-6].";   
  56.      #设定请求缓冲   
  57.      client_header_buffer_size 128k;   
  58.      large_client_header_buffers 4 128k;  
  59.   
  60.     upstream mysvr {     
  61.       server 127.0.0.1:7878;  
  62.       server 192.168.10.121:3333 backup;  #热备  
  63.     }  
  64.     error_page 404 https://www.baidu.com; #错误页  
  65.   
  66.     #设定虚拟主机配置   
  67.      server {  
  68.   
  69.         keepalive_requests 120; #单连接请求上限次数。  
  70.   
  71.         #侦听80端口   
  72.         listen 80;   
  73.         #定义使用 www.nginx.cn访问   
  74.         server_name www.nginx.cn;   
  75.         #定义服务器的默认网站根目录位置   
  76.         root html;   
  77.         #设定本虚拟主机的访问日志   
  78.         access_log logs/nginx.access.log main;   
  79.         #默认请求   
  80.         location / {   
  81.           #定义首页索引文件的名称   
  82.           index index.php index.html index.htm;   
  83.         }   
  84.         # 定义错误提示页面   
  85.         error_page 500 502 503 504 /50x.html;   
  86.         location = /50x.html {   
  87.   
  88.         }   
  89.         #静态文件,nginx自己处理   
  90.         location ~ ^/(images|javascript|js|css|flash|media|static)/ {   
  91.            #过期30天,静态文件不怎么更新,过期可以设大一点,   
  92.            #如果频繁更新,则可以设置得小一点。   
  93.            expires 30d;   
  94.         }   
  95.         #PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置.   
  96.         location ~ .php$ {   
  97.            fastcgi_pass 127.0.0.1:9000;   
  98.            fastcgi_index index.php;   
  99.            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;   
  100.            include fastcgi_params;   
  101.         }  
  102.   
  103.         location  ~*^.+$ {       #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。  
  104.            #root path;  #根目录  
  105.            #index vv.txt;  #设置默认页  
  106.            proxy_pass  http://mysvr;  #请求转向mysvr 定义的服务器列表  
  107.            deny 127.0.0.1;  #拒绝的ip  
  108.            allow 172.18.5.54; #允许的ip             
  109.         }  
  110.   
  111.         #禁止访问 .htxxx 文件   
  112.         location ~ /.ht {   
  113.              deny all;   
  114.         }   
  115.     }  
  116. }  


上面是nginx的基本配置,需要注意的有以下几点:

1、

1.$remote_addr 与$http_x_forwarded_for 用以记录客户端的ip地址;

2.$remote_user :用来记录客户端用户名称; 

3.$time_local : 用来记录访问时间与时区;

4.$request : 用来记录请求的url与http协议;

5.$status : 用来记录请求状态;成功是200, 

6.$body_bytes_s ent :记录发送给客户端文件主体内容大小;

7.$http_referer :用来记录从那个页面链接访问过来的;

8.$http_user_agent :记录客户端浏览器的相关信息;

2、惊群现象:一个网路连接到来,多个睡眠的进程被同事叫醒,但只有一个进程能获得链接,这样会影响系统性能。

3、每个指令必须有分号结束。

附加 Nginx的启动/停止/重启

1:启动

启动代码格式:nginx安装目录地址 -c nginx配置文件地址

例如:

[[email protected] sbin]#/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

2:停止

nginx的停止有三种方式:

1、查看进程号

[[email protected] ~]#ps -ef|grep nginx

2、杀死进程

[[email protected] ~]#kill -QUIT 2072

3:重启

1、验证nginx配置文件是否正确

方法一:进入nginx安装目录sbin下,输入命令./nginx -t

看到如下显示nginx.conf syntax is ok

nginx.conf test is successful

说明配置文件正确!

方法二:在启动命令-c前加-t

[[email protected] sbin]#/usr/local/nginx/sbin/nginx-t -c/usr/local/nginx/conf/nginx.conf

2、重启Nginx服务

方法一:进入nginx可执行目录sbin下,输入命令./nginx -s reload即可

方法二:查找当前nginx进程号,然后输入命令:kill -HUP 进程号 实现重启nginx服务

[html] view plain copy
  1. <pre code_snippet_id="2149796" snippet_file_name="blog_20170125_2_9659130"></pre>  
  2. <pre></pre>  
  3. <pre></pre>  
  4.