nginx 配置

nginx 版本:1.26

安装 Nginx

rpm -Uvh http://nginx.org/packages/centos/8/x86_64/RPMS/nginx-1.26.2-1.el8.ngx.x86_64.rpm
yum install -y nginx

systemctl start nginx.service
systemctl status nginx.service
nginx -s reload
systemctl reload nginx.service
systemctl restart nginx.service

设置开机自启

systemctl enable nginx

检查状态:nginx -t

default.conf

server {
    listen       80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    # error_page   500 502 503 504  /50x.html;
    # location = /50x.html {
    #     root   /usr/share/nginx/html;
    # }

    # 定义错误页面
    error_page 400 401 402 403 404 405 408 410 412 413 414 415 500 501 502 503 504 505 506 /error_pages/index.html;

    # 确保路径正确,并使用 alias 定义错误页面路径
    location /error_pages/ {
        # return text - ok
        # default_type text/plain; # 文本格式
        # return 404 'Not Found Page...';

        # return json - ok
        # default_type application/json;   # json格式
        # return 200 '{"code": "500","msg": "系统出错啦!"}';

        internal;
        alias /usr/share/nginx/html/;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}



# 监听 443 端口(但不启用有效的 SSL 配置)
server {
    listen 443 default_server ssl;
    listen [::]:443 default_server ssl;

    server_name _;  # 匹配任何 IP 地址

    # 空的 SSL 配置(防止 Nginx 报错)
    ssl_certificate     /path/to/xxx.crt;
    ssl_certificate_key /path/to/xxx.key;

    # 强制重定向到 80 端口
    return 301 http://$host$request_uri;

    # 即使不需要,也保留根目录配置
    root /usr/share/nginx/html;
    index index.html index.php;
}

your_domain.conf 【不带ssl】

server {
    listen       80;
    # listen       443 ssl;
    server_name  www.domain.com domain.com;

    # ssl on; #nginx 高板本需要该参数了
    # ssl_certificate     /path/to/xxx.crt; #(证书公钥)
    # ssl_certificate_key /path/to/xxx.key; #(证书私钥)

    access_log  /var/log/nginx/host.access.log  main;
    charset utf-8;

    root /path/to/public;
    index index.php index.html;


    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }


    # 不带www 的全部跳转到www 域名
    # if ($host != 'www.domain.com') {
    #     return 301 https://www.$host$request_uri;
    # }

    # 全部不带www
    if ($host = 'www.domain.com') {
        return 301 https://domain.com$request_uri;
    }

    # 方法一:自动跳转到HTTPS(可选,如果需要强制https可以添加该配置)
    # if ($server_port = 443){
    #     return 301 http://$host$request_uri;
    # }

    # 方法二:自动跳转到HTTPS(可选,如果需要强制https可以添加该配置)
    # if ($scheme = http ) {
    #     return 301 https://$host$request_uri;
    # }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # 默认 路径
    location / {
        # # alias   /path/to/public/;
        # root   /path/to/public/;
        # index  index.php index.html index.htm;


        ################ 跨域处理 ################
        # 允许跨域的请求,可以自定义变量$http_origin,*表示所有  
        add_header 'Access-Control-Allow-Origin' *;  
        # 允许携带cookie请求  
        add_header 'Access-Control-Allow-Credentials' 'true';  
        # 允许跨域请求的方法:GET,POST,OPTIONS,PUT  
        add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS,PUT';  
        # 允许请求时携带的头部信息,*表示所有  
        add_header 'Access-Control-Allow-Headers' *;  
        # 允许发送按段获取资源的请求  
        add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';  
        # 一定要有!!!否则Post请求无法进行跨域!  
        # 在发送Post跨域请求前,会以Options方式发送预检请求,服务器接受时才会正式请求  
        if ($request_method = 'OPTIONS') {  
            add_header 'Access-Control-Max-Age' 1728000;  
            add_header 'Content-Type' 'text/plain; charset=utf-8';  
            add_header 'Content-Length' 0;  
            # 对于Options方式的请求返回204,表示接受跨域请求  
            return 204;  
        }

        # 当上游响应的响应码'大于等于'300[常见"404""500"]; 按error_page指令处理
        proxy_intercept_errors on;
        # 创建自己的404.html页面 需要放在 nginx 的html路径下
        fastcgi_intercept_errors on;



        # try_files $uri $uri/ /index.php?$query_string;

        # 文件和目录不存在的时重定向
        if (!-e $request_filename) {
          # rewrite ^(.*)$ /index.php?s=$1 last;
          rewrite ^(.*)$ /index.php last;
          break;
        }
    }

    # 资源缓存
    # location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)
    # ~代表匹配时区分大小写
    # .*代表任意字符都可以出现零次或多次,即资源名不限制
    # \.代表匹配后缀分隔符.
    # (html|...|css)代表匹配括号里所有静态资源类型
    # 该配置表示匹配以.css~.webm为后缀的所有资源请求。
    location ~* ^.+\.(css|js|ico|gif|jpg|jpeg|png|gz|svg|svgz|mp4|ogg|ogv|webm)$ {
        log_not_found off;
        # 关闭日志
        access_log off;
        # 缓存时间7
        expires 7d;
        # 源服务器
        # proxy_pass http://localhost:8888;
        # 指定上面设置的缓存区域
        proxy_cache imgcache;
        # 缓存过期管理
        proxy_cache_valid 200 302 1d;
        proxy_cache_valid 404 10m;
        proxy_cache_valid any 1h;
        proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
    }


    # 定义错误页面
    # error_page 400 401 402 403 404 405 408 410 412 413 414 415 500 501 502 503 504 505 506 @jump_to_error;
    location @jump_to_error {
    #    # return text - ok
    #    # default_type text/plain; # 文本格式
    #    # return 404 'Not Found Page...';

         # return json - ok
         default_type application/json;   # json格式
         return 200 '{"code": "500","msg": "系统出错啦!"}';
    }

    location ~ \.php$ {
        fastcgi_pass            127.0.0.1:9000;
        fastcgi_split_path_info ^(.+?\.php)(/.+)$;
        fastcgi_param           SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param           PATH_INFO       $fastcgi_path_info;
        fastcgi_param           PATH_TRANSLATED $document_root$fastcgi_script_name;
        include                 fastcgi_params;
    }

    if (!-e $request_filename) {
       # rewrite ^(.*)$ /index.php?s=$1 last;
       rewrite ^(.*)$ /index.php last;
       break;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

your_domain.conf 【带ssl】

server {
    listen       80;
    listen       443 ssl;
    server_name  www.domain.com domain.com;

    #ssl on; #nginx 高板本需要该参数了
    ssl_certificate     /path/to/xxx.crt; #(证书公钥)
    ssl_certificate_key /path/to/xxx.key; #(证书私钥)

    access_log  /var/log/nginx/host.access.log  main;
    charset utf-8;

    root /path/to/public;
    index index.php index.html;


    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }


    # 不带www 的全部跳转到www 域名
    # if ($host != 'www.domain.com') {
    #     return 301 https://www.$host$request_uri;
    # }

    # 全部不带www
    if ($host = 'www.domain.com') {
        #return 301 $scheme://domian.com$request_uri;
        return 301 https://domain.com$request_uri;
        # return 301 https://$http_host$request_uri;
    }

    # 方法一:自动跳转到HTTPS(可选,如果需要强制https可以添加该配置)
    # if ($server_port = 443){
    #     return 301 http://$host$request_uri;
    # }
    if ($server_port = 80){
        rewrite ^(/.*)$ https://$host$1 permanent;
    }

    # 方法二:自动跳转到HTTPS(可选,如果需要强制https可以添加该配置)
    # if ($scheme = http ) {
    #     return 301 https://$host$request_uri;
    # }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # 默认 路径
    location / {
        # # alias   /path/to/public/;
        # root   /path/to/public/;
        # index  index.php index.html index.htm;


        ################ 跨域处理 ################
        # 允许跨域的请求,可以自定义变量$http_origin,*表示所有  
        add_header 'Access-Control-Allow-Origin' *;  
        # 允许携带cookie请求  
        add_header 'Access-Control-Allow-Credentials' 'true';  
        # 允许跨域请求的方法:GET,POST,OPTIONS,PUT  
        add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS,PUT';  
        # 允许请求时携带的头部信息,*表示所有  
        add_header 'Access-Control-Allow-Headers' *;  
        # 允许发送按段获取资源的请求  
        add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';  
        # 一定要有!!!否则Post请求无法进行跨域!  
        # 在发送Post跨域请求前,会以Options方式发送预检请求,服务器接受时才会正式请求  
        if ($request_method = 'OPTIONS') {  
            add_header 'Access-Control-Max-Age' 1728000;  
            add_header 'Content-Type' 'text/plain; charset=utf-8';  
            add_header 'Content-Length' 0;  
            # 对于Options方式的请求返回204,表示接受跨域请求  
            return 204;  
        }

        # 当上游响应的响应码'大于等于'300[常见"404""500"]; 按error_page指令处理
        proxy_intercept_errors on;
        # 创建自己的404.html页面 需要放在 nginx 的html路径下
        fastcgi_intercept_errors on;



        # try_files $uri $uri/ /index.php?$query_string;

        # 文件和目录不存在的时重定向
        if (!-e $request_filename) {
          # rewrite ^(.*)$ /index.php?s=$1 last;
          rewrite ^(.*)$ /index.php last;
          break;
        }
    }

    # 资源缓存
    # location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)
    # ~代表匹配时区分大小写
    # .*代表任意字符都可以出现零次或多次,即资源名不限制
    # \.代表匹配后缀分隔符.
    # (html|...|css)代表匹配括号里所有静态资源类型
    # 该配置表示匹配以.css~.webm为后缀的所有资源请求。
    location ~* ^.+\.(css|js|ico|gif|jpg|jpeg|png|gz|svg|svgz|mp4|ogg|ogv|webm)$ {
        log_not_found off;
        # 关闭日志
        access_log off;
        # 缓存时间7
        expires 7d;
        # 源服务器
        # proxy_pass http://localhost:8888;
        # 指定上面设置的缓存区域
        proxy_cache imgcache;
        # 缓存过期管理
        proxy_cache_valid 200 302 1d;
        proxy_cache_valid 404 10m;
        proxy_cache_valid any 1h;
        proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
    }


    # 定义错误页面
    # error_page 400 401 402 403 404 405 408 410 412 413 414 415 500 501 502 503 504 505 506 @jump_to_error;
    location @jump_to_error {
    #    # return text - ok
    #    # default_type text/plain; # 文本格式
    #    # return 404 'Not Found Page...';

         # return json - ok
         default_type application/json;   # json格式
         return 200 '{"code": "500","msg": "系统出错啦!"}';
    }

    location ~ \.php$ {
        fastcgi_pass            127.0.0.1:9000;
        fastcgi_split_path_info ^(.+?\.php)(/.+)$;
        fastcgi_param           SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param           PATH_INFO       $fastcgi_path_info;
        fastcgi_param           PATH_TRANSLATED $document_root$fastcgi_script_name;
        include                 fastcgi_params;
    }

    if (!-e $request_filename) {
       # rewrite ^(.*)$ /index.php?s=$1 last;
       rewrite ^(.*)$ /index.php last;
       break;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

nginx.conf


# user  nginx;
user www;
# 自动根据CPU核心数调整Worker进程数量
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
# pid        /var/run/nginx.pid;
pid        /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;   # 减少网络报文段的数量
    tcp_nodelay         on;
    keepalive_timeout   65;   # 保持连接的时间,也叫超时时间,单位秒
    types_hash_max_size 2048;

    ######################## 大文件上传处理 ########################
    # 上传文件的大小限制  默认1m
    client_max_body_size 500m;
    # 读取客户端请求头数据的超时时间 默认秒 默认60
    client_header_timeout 120;

    ######################## 压缩 ########################
    # 默认off,是否开启gzip
    gzip on; 
    # 要采用 gzip 压缩的 MIME 文件类型,其中 text/html 被系统强制启用;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/x-httpd-php image/jpeg image/gif image/png;

    # ---- 以上两个参数开启就可以支持Gzip压缩了 ---- #

    # 默认 off,该模块启用后,Nginx 首先检查是否存在请求静态文件的 gz 结尾的文件,如果有则直接返回该 .gz 文件内容;
    gzip_static on;

    # 默认 off,nginx做为反向代理时启用,用于设置启用或禁用从代理服务器上收到相应内容 gzip 压缩;
    # off:关闭Nginx对后台服务器的响应结果进行压缩。
    # expired:如果响应头中包含Expires信息,则开启压缩。
    # no-cache:如果响应头中包含Cache-Control:no-cache信息,则开启压缩。
    # no-store:如果响应头中包含Cache-Control:no-store信息,则开启压缩。
    # private:如果响应头中包含Cache-Control:private信息,则开启压缩。
    # no_last_modified:如果响应头中不包含Last-Modified信息,则开启压缩。
    # no_etag:如果响应头中不包含ETag信息,则开启压缩。
    # auth:如果响应头中包含Authorization信息,则开启压缩。
    # any:无条件对后端的响应结果开启压缩机制。
    gzip_proxied off;

    # 用于在响应消息头中添加 Vary:Accept-Encoding,使代理服务器根据请求头中的 Accept-Encoding 识别是否启用 gzip 压缩;
    gzip_vary on;

    # gzip 压缩比,压缩级别是 1-91 压缩级别最低,9 最高,级别越高压缩率越大,压缩时间越长,建议 4-6
    gzip_comp_level 5;

    # 获取多少内存用于缓存压缩结果,16 8k 表示以 8k*16 为单位获得;
    gzip_buffers 16 8k;

    # 允许压缩的页面最小字节数,页面字节数从header头中的 Content-Length 中进行获取。默认值是 0,不管页面多大都压缩。建议设置成大于 1k 的字节数,小于 1k 可能会越压越大;
    # gzip_min_length 2k;

    # 默认 1.1,启用 gzip 所需的 HTTP 最低版本;
    gzip_http_version 1.1;

    # 禁用IE 6 gzip
    gzip_disable "MSIE [1-6]\.";


    ######################## Nginx缓冲区 ########################

    # 设置与后端服务器建立连接时的超时时间。默认为60s
    proxy_connect_timeout 600s;
    # 设置从后端服务器读取响应数据的超时时间 默认为60s
    proxy_read_timeout 600s;  
    # 设置向后端服务器传输请求数据的超时时间 默认为60s
    proxy_send_timeout 600s;  
    # 是否启用缓冲机制,默认为on关闭状态。
    proxy_buffering on;  
    # 设置缓冲客户端请求数据的内存大小。
    client_body_buffer_size 512k;  
    # 为每个请求/连接设置缓冲区的数量和大小,默认4 4k/8k。
    proxy_buffers 4 512k;  
    # 设置用于存储响应头的缓冲区大小。
    proxy_buffer_size 512k;  
    # 在后端数据没有完全接收完成时,Nginx可以将busy状态的缓冲返回给客户端,该参数用来设置busy状态的buffer具体有多大,默认为proxy_buffer_size*2
    proxy_busy_buffers_size 512k;  
    # 设置每次写数据到临时文件的大小限制。
    proxy_temp_file_write_size 2m;  
    # path是临时目录的路径
    proxy_temp_path /var/temp_buffer;  

    ######################## Nginx缓存 ########################
    # 设置缓存路径并且使用一块最大100M的共享内存,用于硬盘上的文件索引,包括文件名和请求次数,每个文件在1天内若不活跃(无请求)则从硬盘上淘汰,硬盘缓存最大5G,满了则根据LRU算法自动清除缓存。
    proxy_cache_path /var/cache/nginx/cache levels=1:2 use_temp_path=on keys_zone=imgcache:100m inactive=1d max_size=5g;
    # 对于相同的请求,是否开启锁机制,只允许一个请求发往后端。on | off;
    # proxy_cache_lock on;
    # 配置锁超时机制,超出规定时间后会释放请求。默认为5s。
    # proxy_cache_lock_timeout 5;

    # 当上游响应的响应码'大于等于'300[常见"404""500"]; 按error_page指令处理
    proxy_intercept_errors on;
    # 创建自己的404.html页面 需要放在 nginx 的html路径下
    fastcgi_intercept_errors on;

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