我是靠谱客的博主 酷炫便当,最近开发中收集的这篇文章主要介绍nginx配置文件详解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

nginx配置文件详解

    • 一、全局块
        • (1)配置用户组:配置有启停权限的用户
        • (2)配置运行生成的worker process(工作进程数)
        • (3)配置pid文件存放路径
        • (4)配置错误日志文件的存放路径---可放在==全局块、http块、server块、location块==
    • 二、events块
        • (1)accept_mutex
        • (2)multi_accept
        • (3)use method
        • (4)配置最大连接数 worker_connections
    • 三、http块
        • (1)配置文件引入 ---可放在任意地方
        • (2)default_type
        • (3)自定义服务日志
        • (4)配置sendfile方式传输文件 默认开启
        • (5)配置请求保持最大时长---http、server、location
      • 3.1、server块
        • (1)listen、server_name
        • (2)location块
          • uri匹配
          • root 与 alias 的区别
          • index属性
          • 基于IP配置Nginx的访问权限
          • nginx代理常用配置项
          • 超时时间相关配置-http server location
          • try_files
          • error_page

nginx配置文件总的可以分为三块:全局块、events块、http块。

一、全局块

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

(1)配置用户组:配置有启停权限的用户

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

(2)配置运行生成的worker process(工作进程数)

# 如果设置为数字,启动以后就具有多少个worker process,一般为cpu个数
# 设置为auto则自动检测
worker_processes number | auto;

(3)配置pid文件存放路径

#必须包含文件名称
pid logs/nginx_alleyz.pid;

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

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

二、events块

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

(1)accept_mutex

开启该选项表示所有worker进程轮流的接受新的请求,关闭则可能引起惊群问题。如果系统请求量较大,建议关闭,如果请求量很小,则可以根据实际情况打开。

accept_mutex on | off; 默认关闭

(2)multi_accept

如果禁用multi_accept,则工作进程将一次接受一个新连接。否则,工作进程将一次接受所有新连接。推荐开启。

multi_accept on | off; 默认关闭

(3)use method

指定默认的请求处理方法,一般不需要特殊指定,Nginx会根据系统自动选择最合适的选项。推荐使用use epoll。

use epoll;

(4)配置最大连接数 worker_connections

  1. connections不是随便设置的,而是与两个指标有重要关联,一是内存,二是操作系统级别的“进程最大可打开文件数”。
  2. 内存:每个连接数分别对应一个read_event、一个write_event事件,一个连接数大概占用232字节,2个事件总占用96字节,那么一个连接总共占用328字节,通过数学公式可以算出100000个连接数大概会占用 31M = 100000 * 328 / 1024 / 1024,当然这只是nginx启动时,connections连接数所占用的nginx。
  3. 进程最大可打开文件数:进程最大可打开文件数受限于操作系统,可通过 ulimit -n 命令查询,以前是1024,现在是65535,
    nginx提供了worker_rlimit_nofile指令,这是除了ulimit的一种设置可用的描述符的方式。 该指令与使用ulimit对用户的设置是同样的效果。此指令的值将覆盖ulimit的值,如:worker_rlimit_nofile 20960;
    设置ulimits:ulimit -SHn 65535
worker_connections number; #默认值 1024

三、http块

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

(1)配置文件引入 —可放在任意地方

相当于是把引入的东西放在该位置上。

include file;

(2)default_type

  • Nginx 会根据mimet type定义的对应关系来告诉浏览器如何处理服务器传给浏览器的这个文件,是打开还是下载
  • 如果Web程序没设置,Nginx也没对应文件的扩展名,就用Nginx 里默认的 default_type定义的处理方式。
  • mime type 和文件扩展名的对应关系一般放在 mime.types这个文件里,然后用 include mime.types; 来加载
    mime.types文件里是用types指令来定义的
default_type  application/octet-stream;

(3)自定义服务日志

access_log 可在http、server、location中配置;log_format只能在http中配置。

注意:前文提到的error_log配置的是nginx的运行日志,此处值得是应答前段请求的服务日志。可以对日志的格式、大小、输出进行配置,有access_log、log_format 指令,log_format的string整体需要用‘扩起来,变量名称使用双引号括起来。

log_format name string;
access_log path [format [buffer=size]];
 
 
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
                '$status $body_bytes_sent "$http_referer" '
                '"$http_user_agent" "$http_x_forwarded_for"';
access_log  logs/access.log  main;
 
#如果取消日志记录
access_log off;
 

(4)配置sendfile方式传输文件 默认开启

参考https://blog.csdn.net/zhusixun/article/details/81702380

#都是默认开启
sendfile on | off;
sendfile_max_chunk size; #设置为0为限制

(5)配置请求保持最大时长—http、server、location

  • 如果某个请求时长超过这个时间,则会断开链接。
  • HTTP 有一个 KeepAlive 模式,它告诉 webserver 在处理完一个请求后保持这个 TCP 连接的打开状态。若接收到来自客户端的其它请求,服务端会利用这个未被关闭的连接,而不需要再建立一个连接。
  • KeepAlive 在一段时间内保持打开状态,它们会在这段时间内占用资源。占用过多就会影响性能。
keepalive_timeout  65;

3.1、server块

(1)listen、server_name

通过nginx可以实现虚拟主机的配置,nginx支持三种类型的虚拟主机配置:

1、基于ip的虚拟主机

Linux操作系统允许添加IP别名,就是在一块物理网卡上绑定多个iP地址。所以server_name可以通过配置不通ip进行不同的跳转,其实最终访问的都是nginx所在的服务器。

2、基于域名的虚拟主机

配置域名需要在客户端hosts文件中配置映射关系,请求时会携带ip以及域名进行访问,nginx可以通过不同域名进行处理。(如果此处服务器没有绑定多ip,则可以映射为同一ip,如果绑定了,则映射多个ip或单个都可以)

3、基于端口的虚拟主机

通过listen配置的端口不同进行不同的处理。

实际使用的过程中,我们一般常用的是用域名或是端口来区分web服务。

listen       80; #监听端口
server_name  localhost; 可配置多个ip或域名,可以使用通配符*,支持正则

(2)location块

uri匹配
location [ = | ~ | ~* | ^~] uri {...}
  • =用于普通uri之前,表示严格匹配
  • ~ uri包含正则表达式,并且区分大小写
  • ~* 表示包含正则表达式,并且不区分大小写
  • ^~ 如果找到与uri匹配度最高的location,立即处理请求。 会对uri进行反编码
  • 都不用只写 uri ,/ 表示通用匹配。例如:
location / {         [ configuration ] }# /index.html ok
location /test {    [ configuration ] }# /test ok# /test2 ok# /test/ ok
root 与 alias 的区别
location /url/ {    root /data/img;}
当请求 /url/top.gif ,/data/img/i/top.gif 会被返回。
location /url/ {    alias /data/img/images/;}
当请求 /url/top.gif ,/data/img/images/top.gif 会被返回。

所以 root 是直接拼接 root + location 而 alias 是用 alias 替换 location

root在server中也可以使用,如果location中能匹配到,就是用 location中的root配置,忽略server中的root,当 location中匹配不到的时候,则使用 server 中的root 配置。

index属性

设置网站的默认首页,可以设置多个,会以先后顺序去查询。例子:

server {
    listen      80;
    server_name example.org www.example.org;    
    
    location / {
        root    /data/www;
        index   index.html index.php;
    }
    
    location ~ .php$ {
        root    /data/www/test;
    }
}

上面的例子中,如果你使用example.org或www.example.org直接发起请求,那么首先会访问到“/”的location,结合root与index指令,会先判断/data/www/index.html是否存在,如果不,则接着查看
/data/www/index.php ,如果存在,则使用/index.php发起内部重定向,就像从客户端再一次发起请求一样,Nginx会再一次搜索location,毫无疑问匹配到第二个~ .php$,从而访问到/data/www/test/index.php。

基于IP配置Nginx的访问权限

http server location都可以使用

location / {
    root html;
    index index.html;
    allow address | CIDR | all; #允许哪些ip访问
    deny address | CIDR | all; #不允许哪些ip访问
}

address : 允许访问的客户端IP,不支持同时设置多个。如果有多个IP需要设置,需要重复使用allow指令。

CIDR : 允许访问的客户端的CIDR地址,例如202.80.18.23/25,前面是32位IP地址,后面“/25”代表该IP地址中前25位是网络部分,其余位代表主机部分。

all,代表允许所有客户端访问。

nginx代理常用配置项

将带有core路径的请求转发到127.0.0.1:8110。

  • proxy_set_header Host 携带host信息在请求头中。
  • proxy_set_header X-Real-IP $remote_addr 只能获取到与服务器本身直连的上层请求ip 写入到http请求头中
  • proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for 相当于 $http_x_forwarded_for 和 $remote_addr和结合 获取上层IP和把客户端IP写入请求头中,
  • proxy_pass 配置代理的服务端地址
location ~ /core/ {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass   http://127.0.0.1:8110;
}
超时时间相关配置-http server location
client_max_body_size     50m; //文件大小限制,默认1m

client_header_timeout    1m;

client_body_timeout      1m;

proxy_connect_timeout     60s;

proxy_read_timeout      1m;

proxy_send_timeout      1m;

client_max_body_size

限制请求体的大小,若超过所设定的大小,返回413错误。

client_header_timeout

读取请求头的超时时间,若超过所设定的大小,返回408错误。

client_body_timeout

读取请求实体的超时时间,若超过所设定的大小,返回413错误。

proxy_connect_timeout

http请求无法立即被容器(tomcat, netty等)处理,被放在nginx的待处理池中等待被处理。此参数为等待的最长时间,默认为60秒,官方推荐最长不要超过75秒。

proxy_read_timeout

http请求被容器(tomcat, netty等)处理后,nginx会等待处理结果,也就是容器返回的response。此参数即为服务器响应时间,默认60秒。

proxy_send_timeout

http请求被服务器处理完后,把数据传返回给Nginx的用时,默认60秒。

try_files
location /images/ {
    root /opt/html/;
    try_files $uri   $uri/  /images/default.gif; 
}
  • 请求 127.0.0.1/images/test.gif 会依次查找 1.文件/opt/html/images/test.gif 2.文件夹 /opt/html/images/test.gif/下的index文件 3. 请求127.0.0.1/images/default.gif
  • 注意:try-files 如果不写上 $uri/,当直接访问一个目录路径时,并不会去匹配目录下的索引页 即 访问127.0.0.1/images/ 不会去访问 127.0.0.1/images/index.html
error_page

通过请求返回对应的状态码,跳转到指定的uri。

error_page  404              /404.html;

最后

以上就是酷炫便当为你收集整理的nginx配置文件详解的全部内容,希望文章能够帮你解决nginx配置文件详解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部