Nginx 的配置文件及简单示例

nginx相关命令

  • 在windows 下nginx 开头的命令要改为 .\nginx ,例如: .\nginx -t
命令作用
nginx -t验证(nginx.conf)配置文件是否有语法错误
nginx -V查看Nginx的版本号
start nginx启动Nginx (windows下start nginx)
nginx -c /usr/local/nginx/conf/nginx.conf启动nginx
nginx -s stop快速停止或关闭Nginx
nginx -s quit正常停止或关闭Nginx
nginx -s reload配置文件修改重装载命令
nginx -h查看帮助信息
nginx -s reopen打开日志文件

nginx.conf 配置文件

  • nginx.conf是nginx重要的配置文件。配置虚拟主机,反向代理,是否采用负载均衡等等一系列的配置,都是在nginx.conf进行配置的。
nginx.conf文件结构
  • 文件结构主要由三块组成:全局块,events块,http块;http块中包含http全局块和多个server块,每个server块中包含server全局块和多个location块,采用就近原则生效
全局块

配置一些影响整体运行的指令,通常有服务器用户组允许生成的worker process nginx.pid存放路径 日志存放路径 类型 配置文件引入

events块

影响nginx服务器与用户的网络连接,这一块的设置对服务的性能影响较大。通常有是否开启对WP下的网络进行序列化 是否允许同时接受多个网络连接 事件驱动模型 每个WP可以同时支持处理的最大连接数

http块

重要组成部分,代理、缓存和日志定义、第三方模块的配置。 通常配置 文件引入 MIME-TYPE定义 日志自定义 是否使用sendfile传输文件 连接超时时间 单连接请求数上限

nginx.conf 配置细节详解
1.全局模块常用配置
配置用户组
  • 运行用户可不设置,默认即是nginx

# 配置alleyz用户 admin组下有启停权限
user alleyz [admin];

配置运行进程数
  • nginx进程,建议设置为和本机cpu核数一致
  • 如果设置为数字,启动以后就有多少个worker process
  • 设置为auto表示自动检测

# 表示nginx启动四个进程
worker_processes 4;

配置pid文件存放路径
  • 默认存放在logs/nginx.pid
  • pid:进程标识符

pid   logs/nginx.pid;

配置错误日志文件的存放路径
  • 可在全局块、http块、server块、location块配置

error_log file | stderr      [ debug| info | notice | warn | error | crit | alert | emerg]

配置文件引入
  • 可在任意地方引入
  • 缺省值: none

# 包含一个目录下所有以”.conf”结尾的文件
include vhosts/*.conf;

2. 事件(events)模块的常用组件
选择事件驱动模型

use kqueue | rtsig | epoll | /dev/poll | select | poll | eventport

配置最大连接数
  • 允许每一个WP同时开启的最大连接数。此值不能大于操作系统支持的打开的最大文件句柄数.

worker_connections number; #默认值 512

accept_mutex
  • 默认开启(激活)
  • 当一个新连接到达时,如果激活了accept_mutex,那么多个Worker将以串行方式来处理,其中有一个Worker会被唤醒,其他的Worker继续保持休眠状态;如果没有激活accept_mutex,那么所有的Worker都会被唤醒,不过只有一个Worker能获取新连接,其它的Worker会重新进入休眠状态,这就是「惊群问题」

accept_mutex on | off;

设置是否允许同时接受多个连接
  • 默认关闭

multi_accept on | off;

连接超时时间

keepalive_timeout 60;

客户端请求头部的缓冲区大小
  • 这个可以根据你的系统分页大小来设置,一般一个请求头的大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小,且该值必须设置为“系统分页大小”的整倍数。

client_header_buffer_size 4k;

为打开文件指定缓存
  • 这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存。

open_file_cache max=65535 inactive=60s;

设置检查一次缓存的有效信息的间隔时间

open_file_cache_valid 80s;

open_file_cache_min_uses
  • open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的。

# 如果有一个文件在inactive时间内一次没被使用,它将被移除
open_file_cache_min_uses 1;

3. HTTP模块的核心组件和变量
  • http模块主要有三个作用域: http,server,location
  • http域:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
  • server域:配置虚拟主机的相关参数,一个http中可以有多个server。
  • location域:配置请求的路由,以及各种页面的处理情况。
  • 该模块下有些配置的语法过于复杂,下文只简单介绍
3.0 通用的配置
# 配置该域内需要引用文件或路径的一个“相对根路径”
# 默认值:root html
root /data/test;
3.1.HTTP作用域
 include mime.types; #文件扩展名与文件类型映射表
 default_type application/octet-stream; #默认文件类型
 charset utf-8; #默认编码
 server_names_hash_bucket_size 128; #服务器名字的hash表大小
 client_header_buffer_size 32k; #上传文件大小限制
 large_client_header_buffers 4 64k; #设定请求缓
 client_max_body_size 8m; #设定请求缓
 sendfile on; #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off。
 autoindex on; #开启目录列表访问,合适下载服务器,默认关闭。
 tcp_nopush on; #防止网络阻塞
 tcp_nodelay on; #防止网络阻塞
 keepalive_timeout 120; #长连接超时时间,单位是秒

 #FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。下面参数看字面意思都能理解。
 fastcgi_connect_timeout 300;
 fastcgi_send_timeout 300;
 fastcgi_read_timeout 300;
 fastcgi_buffer_size 64k;
 fastcgi_buffers 4 64k;
 fastcgi_busy_buffers_size 128k;
 fastcgi_temp_file_write_size 128k;

 #gzip模块设置
 gzip on; #开启gzip压缩输出
 gzip_min_length 1k; #最小压缩文件大小
 gzip_buffers 4 16k; #压缩缓冲区
 gzip_http_version 1.0; #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)
 gzip_comp_level 2; #压缩等级
 gzip_types text/plain application/x-javascript text/css application/xml;

 #压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。
 gzip_vary on;
 #limit_zone crawler $binary_remote_addr 10m; #开启限制IP连接数的时候需要使用

# 负载均衡
  upstream qianyunlai.com {
  #upstream的负载均衡,weight是权重,可以根据机器配置定义权重。weigth参数表示权值,权值越高被分配到的几率越大。
  server 192.168.80.121:80 weight=3;
  server 192.168.80.122:80 weight=2;
  server 192.168.80.123:80 weight=3;
 }
3.2.Server作用域
#监听端口
listen 80;
#监听地址,可以采用域名,多个用空格隔开
server_name www.abc.com abcd.com;
#单连接请求上限次数。
keepalive_requests 120; 

# 配置该域内其它文件相对路径的相对根路径
# 默认值:root html
root /data/test;
# 遇到500,502等错误,重定向到/50x.html地址
error_page  500 502 503 504  /50x.html;

#定义本虚拟主机的访问日志
access_log /var/log/nginx/qianyunlai.log main;


3.3.location 作用域
root /data/cat;  #location内根目录
index html.index;  #设置默认页
proxy_pass  http://localhost:8888;  #请求转向的服务器
deny 127.0.0.1;  #拒绝的ip
allow 172.18.5.54; #允许的ip     
  • alias
    • alias会把location后面配置的路径丢弃掉,把当前匹配到的目录指向到指定的目录。
    • 使用alias时,目录名后面一定要加”/”。
    • alias可以指定任何名称。
    • alias在使用正则匹配时,必须捕捉要匹配的内容并在指定的内容处使用。
location ~ /page/ {
alias /data/statics/newPage/
}

# 如果一个请求的URI是/page/error/error.page时,web服务器将会返回服务器上的/data/statics/newPage/error/error.page的文件。
3.4 if 作用域

windows 下配置示例

worker_processes  4;

error_log  logs/error.log  notice;



events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;

    keepalive_timeout  65;


# 我在本机的hosts里配置里abcd.com,abc.com两个到本机的映射
# 我以abc.com:8861访问本机时会转到本机8888端口的服务
   server {
        listen       8861;
        server_name  abc.com;

        location / {
            proxy_pass  http://localhost:8888;
        }
    }
# 我以abcd.com:8861访问本机时会转到baidu的链接上
   server {
        listen       8861;
        server_name  abcd.com;

        location / {
            proxy_pass  http://www.baidu.com;
        }
    }

}

总结

  • 以上配置讲解很乱,尤其是http模块,配置细节缺失很多,打算后面根据具体的功能实现单独拆分章节讲解。如有错误,欢迎指正。
    原文作者:spongeboblz
    原文地址: https://blog.csdn.net/u014296316/article/details/80938716
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞