Nginx 配置解析

参考

Nginx 配置文件

  • nginx配置文件位置:/etc/nginx/nginx.conf/usr/local/nginx/conf/nginx.conf
  • nginx配置文件定义了各个块的配置,以及指令
  • worker_processes :定义了Nginx的工作进程数。
  • http { ... }: 定义了HTTP协议相关的配置。可以在这里使用 include 指令来加载额外的配置文件,就是子配置文件
    • 子配置文件一般位于 /etc/nginx/conf.d/ 目录下(或其他由主配置文件中 include 指令指定的目录),以 .conf 结尾的文件名。
    • 子配置文件一般在 http 上下文中定义的 server { ... }
  • 主配置文件:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    # /etc/nginx/nginx.conf
    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;
    }

Nginx 配置文件示例

  • 简单的HTTP配置
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    server {
    # 监听80端口
    listen 80;

    location / {
    # 指定静态页面的根目录
    root /usr/share/nginx/html;

    # 指定默认首页
    index index.html;

    # 按照指定的顺序检查文件是否存在,并根据结果处理请求。
    # $uri:首先尝试将请求的URI直接映射到文件系统上的一个文件。例如,如果请求的是 /img/photo.png,Nginx会检查 /usr/share/nginx/html/img/photo.png 是否存在。
    # $uri/:如果上述步骤失败(即找不到对应的文件),则尝试将其视为一个目录,并查找该目录下的默认索引文件(如由 index 指令指定的 index.html)。
    try_files $uri $uri/ @rewrites;
    }

    location @rewrites {
    rewrite ^(.+)$ /index.html last;
    }
    }

  • HTTPS配置
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    server {
    listen 80;
    server_name exwckv.top;
    return 301 https://$host$request_uri; # 将所有HTTP请求重定向到HTTPS
    }

    server {

    # 添加 ssl 参数表示通过此端口进行的所有通信都应使用SSL/TLS加密。需配置SSL证书和私钥文件的位置
    listen 443 ssl;

    # 用于定义虚拟主机(也称为基于名称的虚拟主机)所响应的域名或主机名
    # 如果没有域名,可以省略 server_name 指令或者直接指定服务器的公网IP地址
    # 当 Nginx 接收到一个请求时,它会根据 HTTP 请求头中的 Host 字段来匹配 server_name,从而确定使用哪个 server 块来处理该请求。
    server_name exwckv.top;

    ssl_certificate /etc/nginx/certs/fullchain.pem; # 指定SSL证书的位置
    ssl_certificate_key /etc/nginx/certs/privkey.pem; # 指定SSL私钥的位置

    location / {
    root /usr/share/nginx/html;
    index index.html;
    try_files $uri $uri/ @rewrites;
    }

    location @rewrites {
    rewrite ^(.+)$ /index.html last;
    }

    # 解决跨域问题(可选)
    add_header Access-Control-Allow-Origin *;
    add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
    add_header Access-Control-Allow-Headers *;
    }

nginx属性设置

  • server_name: 配置中用于定义虚拟主机(也称为基于名称的虚拟主机)所响应的域名或主机名。注意:多个模块都匹配时,按照:精确匹配->通配符匹配->正则匹配
    • 精确匹配:确切的域名,例如 server_name example.com;
    • 通配符匹配: 通配符匹配,例如 server_name *.example.com;
    • 正则匹配: 正则匹配 需要在名称前面加上波浪线(~),例如 server_name ~^(www\.)?example\.com$;
    • 默认服务器:没有其他 server_name 匹配时使用的服务器,可以在 listen 指令后添加 default_server 参数。例如,listen 80 default_server;
    • 多域名支持:你还可以在一个 server_name 指令中列出多个域名,用空格分隔。例如,server_name example.com www.example.com;。这样,这两个域名都会指向同一个 server 块。

常用nginx指令

  • nginx -t: 检查配置文件是否有误
  • nginx -s reload: 重载配置文件,不会重启服务器,只是重新加载配置文件,不会影响正在运行的服务