Nginx 配置文件详解,配置看这一篇就够了


共计 3827 个字符,预计需要花费 10 分钟才能阅读完成。

了解 nginx 配置文件对经常使用 nginx 的我们来说有很多好处,遇到问题能快速给出解决方案,并且能玩出不一样的东西,比如用 nginx 做正向代理。

一、结构

...              #全局块

events {         #events块
   ...
}

http      #http块
{
    ...   #http全局块
    server        #server块
    { 
        ...       #server全局块
        location [PATTERN]   #location块
        {
            ...
        }
        location [PATTERN] 
        {
            ...
        }
    }
    server
    {
      ...
    }
    ...     #http全局块
}

1、全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。

2、events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。

3、http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。

4、server块:配置虚拟主机的相关参数,一个http中可以有多个server。

5、location块:配置请求的路由,以及各种页面的处理情况。

二、详细配置

########### 每个指令必须有分号结束。#################
user administrator administrators;  # 配置用户或者组,默认为nobody nobody。
worker_processes 2;  # 允许生成的进程数,默认为1
pid /nginx/pid/nginx.pid;   # 指定nginx进程运行文件存放地址
error_log log/error.log debug;  # 制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
events {
    accept_mutex on;   # 设置网路连接序列化,防止惊群现象发生,默认为on
    multi_accept on;  # 设置一个进程是否同时接受多个网络连接,默认为off
    #use epoll;      #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    worker_connections  1024;    # 最大连接数,默认为512
}
http {
    include       mime.types;   # 文件扩展名与文件类型映射表
    default_type  application/octet-stream; # 默认文件类型,默认为text/plain
    #access_log off; #取消服务日志
    log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; # 自定义格式
    access_log log/access.log myFormat;  # combined为日志格式的默认值
    sendfile on;   # 允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
    sendfile_max_chunk 100k;  # 每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
    keepalive_timeout 65;  # 连接超时时间,默认为75s,可以在http,server,location块。

    upstream mysvr {
      server 127.0.0.1:7878;
      server 192.168.10.121:3333 backup;  # 热备
    }
    error_page 404 https://www.baidu.com; # 错误页
    server {
        keepalive_requests 120; # 单连接请求上限次数。
        listen       4545;   # 监听端口
        server_name  127.0.0.1;   # 监听地址
        location  ~*^.+$ {       # 请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
           # root path;  # 根
           # index vv.txt;  # 设置默认页
           proxy_pass  http://mysvr;  # 请求转向mysvr 定义的服务器列表
           deny 127.0.0.1;  # 拒绝的ip
           allow 172.18.5.54; # 允许的ip
        }
    }
}

上面是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.conf:

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    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  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

conf.d 下 default.conf:

# Copy from nginx docker image
server_tokens off;

# openapi服务,第三方应用;双向认证
server {

    listen 443 ssl;
 server_name www.openapi.com;

    client_max_body_size 500m;

    ssl_certificate /etc/nginx/conf.d/openapi.crt; # openapi证书公钥
    ssl_certificate_key /etc/nginx/conf.d/openapi.key; # openapi私钥
    ssl_client_certificate /etc/nginx/conf.d/app_ca.crt; # app_ca中间证书
    ssl_verify_client on; # 是否开启客户端请求来源验证
    ssl_verify_depth 2;
    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        add_header X-Frame-Options "SAMEORIGIN";
        root   /usr/share/nginx/html/dcmc;
        index  index.html index.htm;

        # SPA
        try_files $uri /index.html;
    }

    location /openapi/ {
        add_header X-Frame-Options "SAMEORIGIN";
        proxy_pass http://openapi:9000/;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_set_header Host $http_host;
        proxy_set_header Referer $http_referer;
        proxy_set_header Origin $http_origin;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-SSL-Client-Escaped-Cert $ssl_client_escaped_cert;
        proxy_set_header X-SSL-Client-Serial $ssl_client_serial;
    }
}

提醒:本文发布于157天前,文中所关联的信息可能已发生改变,请知悉!

【腾讯云服务器大降价】2核4G 222元/3年 1核2G 38元/年

给TA打赏
共{{data.count}}人
人已打赏
云原生

Mongodb 命令行详细使用教程

2023-9-16 12:34:57

云原生

Nginx 的 location 规则优先级详解

2023-9-16 14:23:44

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索