nginx.conf的作用以及如何配置

2 阅读3分钟

nginx.conf 是 Nginx 的主配置文件,用于定义 Nginx 的全局和特定站点的行为。这个文件通常位于 /etc/nginx/nginx.conf,但根据你的操作系统和安装方式,位置可能会有所不同。

以下是 nginx.conf 文件的一些主要作用和配置方法:

主要作用

  1. 全局设置:定义 Nginx 运行的用户(如 user nginx)、工作进程数(如 worker_processes 4)、日志文件路径等。
  2. 事件块:配置 Nginx 的事件模型和连接参数,如 worker_connections 1024
  3. HTTP 块:定义 HTTP 服务的相关设置,包括 GZIP 压缩、代理设置、缓存等。
  4. 服务器块:定义虚拟主机的设置,如监听端口、服务器名称、根目录、索引文件等。

配置示例

以下是一个简单的 nginx.conf 配置示例:

user nginx;
worker_processes 4;
worker_rlimit_nofile 10000

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

events {
    worker_connections  10240;
    multi_accept on;
    #use epoll;
}

http {
    gzip on; #开启gizip
    gzip_buffers 32 4K;#压缩在内存中缓冲32块 每块4K
    gzip_comp_level 6 ;#压缩级别 推荐6
    gzip_min_length 4000;#开始压缩的最小长度4bit
    gzip_types text/css text/xml application/javascript application/json;
    gzip_disable  "MSIE [1-6].";

    gzip_http_version 1.1;

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

    erver_tokens off;
    include        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  logs/access.log  main;
    sendfile        on;
    client_max_body_size 100m;
    tcp_nodelay on;
    keepalive_timeout  0;
    upstream **      #定义负载均衡组为web1
    {
        ip_hash;
        server 127.0.0.1:8083;
    }
    #http配置
    server {
        listen       8080;
        server_name  127.0.0.1; #localhost

        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }
        
        #如果请求的是jpg|jpeg|gif|png等格式的图片,那么进入下面的location,通过代理进入imgserver这个upstream
        #使用帮助文档时,不可以使用下面的配置
        location ~* .(jpg|jpeg|gif|png|md) {
                root D:/workspace/gientech/code/web/**/dist/**;
                proxy_set_header X-Forwarded-For  $remote_addr;
                proxy_set_header Host $http_host;
            gzip_static on;
            proxy_set_header X-Scheme $scheme;
        }
            
        
        #如果请求的是aci、export等连接,那么进入下面的location,通过代理进入dtsconf这个upstream
        location / {
            gzip_static on;
            root   D:/workspace/gientech/code/web/**/dist/**;
            index  index.html;
        }


        error_page  500 502 503 504 403 404  /404.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
        
       
    location ~ ^/(**) {
        gzip_static on;
        if ($request_method = 'OPTIONS') {
            add_header Access-Control-Allow-Origin *;
            add_header Access-Control-Allow-Credentials true;
            add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
            add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
            return 200;
        }

        if ($request_method = 'POST') {
            add_header 'Access-Control-Allow-Origin' *;
            add_header 'Access-Control-Allow-Credentials' 'true';
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
            add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'
        }
        
        if ($request_method = 'GET') {
            add_header 'Access-Control-Allow-Origin' *;
            add_header 'Access-Control-Allow-Credentials' 'true';
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
            add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'
        }
        
        ```
        proxy_connect_timeout 18000; ##修改成半个小时

        proxy_send_timeout 18000;

        proxy_read_timeout 18000;
        proxy_pass_header Server;
        # 配置转发websocket
        proxy_http_version 1.1;
        proxy_set_header Host $http_host;
        # 配置转发websocket
        proxy_set_header Upgrade $http_upgrade;
        # 配置转发websocket
        proxy_set_header Connection "upgrade";
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        # 二级目录转发
        # rewrite ^/bbb/(.*)$ /$1 break;
        proxy_pass https://**;
       
    }
}

配置说明

  1. 全局设置

    • user nginx;:指定 Nginx 运行的用户。
    • worker_processes auto;:自动设置工作进程数,可以根据 CPU 核心数进行调整。
    • error_log /var/log/nginx/error.log;:定义错误日志文件路径。
    • pid /var/run/nginx.pid;:定义 Nginx 进程 ID 文件路径。
  2. 事件块

    • events { worker_connections 1024; }:每个工作进程的最大连接数。
  3. HTTP 块

    • include /etc/nginx/mime.types;:包含 MIME 类型定义文件。
    • default_type application/octet-stream;:默认的 MIME 类型。
    • sendfile on;:开启高效文件传输。
    • keepalive_timeout 65;:保持连接的超时时间。
  4. 服务器块

    • listen 8080;:监听 8080 端口。
    • server_name localhost;:服务器名称。
    • location / { root /usr/share/nginx/html; index index.html index.htm; }:定义根目录和索引文件。
    • error_page 500 502 503 504 /50x.html;:定义错误页面。
    • location = /50x.html { root /usr/share/nginx/html; }:定义 50x 错误页面的路径。

配置步骤

  1. 打开 nginx.conf 文件:

    sudo nano /etc/nginx/nginx.conf
    
  2. 根据需要修改配置。

  3. 保存并关闭文件。

  4. 测试配置文件是否正确:

    sudo nginx -t
    
  5. 重新加载 Nginx 配置:

    sudo systemctl reload nginx
    

通过以上步骤,你可以配置 Nginx 的基本行为,并根据需要添加更多的服务器块或进行高级配置。