博客
关于我
nginx配置详解、端口重定向和504
阅读量:794 次
发布时间:2023-02-15

本文共 4429 字,大约阅读时间需要 14 分钟。

Nginx 配置详解与常见问题解决方案

作为高性能的反向代理服务器,Nginx 的配置对服务器性能和稳定性有着重要影响。本文将详细介绍 Nginx 配置文件的各项功能模块,并提供针对常见问题的解决方案。

1. 用户和组的设置

user www www;

该配置项指定了 Nginx 运行的用户和用户组,通常建议将其设置为 www 用户,用于限制 Nginx 运行权限,防止配置文件被篡改。

2. 进程数和文件描述符

worker_processes 8;worker_rlimit_nofile 65535;
  • worker_processes:建议设置为等于 CPU 核心数。例如,8 核机器设置为 8。
  • worker_rlimit_nofile:设置文件描述符的最大数量。通常建议与系统 ulimit -n 保持一致。

3. 工作模式与连接数上限

events {    use epoll;    worker_connections 65535;}
  • use epoll:启用 epoll 模型,适用于 Linux 2.6 及以上版本,提供高性能的网络 I/O 处理。
  • worker_connections:单个进程的最大连接数,最大连接数为连接数乘以进程数。

4. HTTP 服务器配置

http {    include mime.types;    default_type application/octet-stream;    charset utf-8;    server_names_hash_bucket_size 128;    client_header_buffer_size 32k;    large_client_header_buffers 4 64k;    client_max_body_size 8m;    sendfile on;    autoindex on;    tcp_nopush on;    tcp_nodelay on;    keepalive_timeout 120;}
  • include mime.types:包含 MIME 类型映射文件。
  • default_type:默认文件类型。
  • charset utf-8:默认字符编码。
  • sendfile on:启用 sendfile 指令,提升文件传输效率。
  • autoindex on:启用目录索引,适用于下载服务器。
  • keepalive_timeout 120:长连接超时时间,单位为秒。

5. FastCGI 相关参数

fastcgi_connect_timeout 300;fastcgi_send_timeout 300;fastcgi_read_timeout 300;fastcgi_buffer_size 64k;fastcgi_buffers 4 64k;fastcgi_busy_buffers_size 128k;fastcgi_temp_file_write_size 128k;
  • fastcgi_connect_timeout:连接超时。
  • fastcgi_send_timeout:发送超时。
  • fastcgi_read_timeout:读取超时。
  • fastcgi_buffer_size:缓冲区大小。
  • fastcgi_buffers:多个缓冲区,提高并发处理能力。
  • fastcgi_busy_buffers_size:高负载下的缓冲区大小。
  • fastcgi_temp_file_write_size:临时文件写入大小。

6. Gzip 模块

gzip on;gzip_min_length 1k;gzip_buffers 4 16k;gzip_http_version 1.0;gzip_comp_level 2;gzip_types text/plain application/x-javascript text/css application/xml;gzip_vary on;
  • gzip on:启用 Gzip 压缩。
  • gzip_min_length:最小压缩文件大小。
  • gzip_buffers:压缩缓冲区。
  • gzip_http_version:压缩协议版本。
  • gzip_comp_level:压缩等级,2 为最优。
  • gzip_types:压缩类型,包含常见文件格式。
  • gzip_vary on:启用压缩变量,避免重复内容。

7. 虚拟主机配置

server {    listen 80;    server_name ha97.com;    index index.html index.htm index.php;    root /data/www/ha97;    location ~ .*.(php|php5)?$ {        fastcgi_pass 127.0.0.1:9000;        fastcgi_index index.php;        include fastcgi.conf;    }    location ~ .*.(gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {        expires 10d;    }    location ~ .*.(js|css)?$ {        expires 1h;    }}
  • server_name ha97.com:定义虚拟主机域名。
  • root /data/www/ha97:指定服务静态文件目录。
  • location ~ .*.(php|php5)?$:处理 PHP 请求,通过 FastCGI代理。
  • location ~ .*.(gif|jpg|...)$:设置静态资源缓存时间。
  • location ~ .*.(js|css)?$:设置 JavaScript 和 CSS 缓存时间。

8. 日志格式设定

log_format access '$remote_addr - $remote_user [$time_local] "$request" "$status" $body_bytes_sent "$http_referer" "$http_user_agent" $http_x_forwarded_for';access_log ar/loginx/ha97access.log access;
  • log_format:定义日志格式。
  • access_log:指定访问日志文件和格式。

9. 动静分离反向代理

location /NginxStatus {    stub_status on;    access_log on;    auth_basic "NginxStatus";    auth_basic_user_file confpasswd;}location / {    proxy_pass "";    proxy_redirect off;    proxy_set_header X-Real-IP $remote_addr;    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    proxy_set_header Host $host;    client_max_body_size 10m;    client_body_buffer_size 128k;    proxy_connect_timeout 90;    proxy_send_timeout 90;    proxy_read_timeout 90;    proxy_buffer_size 4k;    proxy_buffers 4 32k;    proxy_busy_buffers_size 64k;    proxy_temp_file_write_size 64k;}
  • proxy_pass "":启用反向代理。
  • proxy_set_header:设置头部字段,支持 X-Forwarded-For 等。
  • client_max_body_size:限制请求体大小。
  • proxy_connect_timeout:代理连接超时。
  • proxy_send_timeout:代理发送超时。
  • proxy_read_timeout:代理读取超时。
  • proxy_buffer_size:设置缓冲区大小。
  • proxy_buffers:多个缓冲区,提升并发处理能力。
  • proxy_busy_buffers_size:高负载下的缓冲区大小。
  • proxy_temp_file_write_size:临时文件写入大小。

10. 常见问题解决方案

1. 端口重定向

默认 Nginx 端口为 80。如果需要将其重定向为 8000 等端口,可执行以下操作:

  • 在 Nginx 配置文件中,添加:port_in_redirect off;
  • server 块中,将 Host $host; 修改为 Host $host:端口号;
  • 2. 504 Gateway Time-out

    解决方式来自:jingyan.baidu.com/article/6fb756ecbf4774241858fb9a.html

    • 情况1:由于 Nginx 默认的 FastCGI 进程响应缓冲区太小造成的问题。

      解决方法:

      • 修改 Nginx 配置文件,加入:fastcgi_buffers 8 128k;
      • 可以继续调大 Send 和 Read 超时时间,例如设置为 60 秒。
    • 情况2:PHP 环境配置问题。

      解决方法:

      • 修改 php-fpmmax_children 为 30,提高处理效率。
      • 修改 request_terminate_timeout 为 60 秒,防止进程被挂起。
      • 调整 Nginx 配置,例如将 fastcgi_buffers 由 4 64k 改为 2 256k。

    3. 网络阻塞问题

    针对通过 Nginx 转发的 JS 和 CSS,出现 net::ERR_INCOMPLETE_CHUNKED_ENCODING 的问题:

    • 原因1:缓存池较小。可通过设置缓存大小调整:fastcgi_buffers 8 128k; fastcgi_buffer_size 128k;
    • 原因2:缓存文件访问权限问题。可执行:chown -R nobody:nobody proxy_temp/

    总结

    通过合理配置 Nginx,可以显著提升服务器性能和稳定性。本文详细介绍了 Nginx 配置的各项功能模块,并提供了针对常见问题的解决方案。

    转载地址:http://mujfk.baihongyu.com/

    你可能感兴趣的文章
    Netty工作笔记0030---NIO与零拷贝原理剖析
    查看>>
    Netty工作笔记0034---Netty架构设计--线程模型
    查看>>
    Netty工作笔记0050---Netty核心模块1
    查看>>
    Netty工作笔记0057---Netty群聊系统服务端
    查看>>
    Netty工作笔记0058---Netty群聊系统客户端
    查看>>
    Netty工作笔记0060---Tcp长连接和短连接_Http长连接和短连接_UDP长连接和短连接
    查看>>
    Netty工作笔记0061---Netty心跳处理器编写
    查看>>
    Netty工作笔记0063---WebSocket长连接开发2
    查看>>
    Netty工作笔记0068---Protobuf机制简述
    查看>>
    Netty工作笔记0070---Protobuf使用案例Codec使用
    查看>>
    Netty工作笔记0071---Protobuf传输多种类型
    查看>>
    Netty工作笔记0072---Protobuf内容小结
    查看>>
    Netty工作笔记0074---handler链调用机制实例1
    查看>>
    Netty工作笔记0077---handler链调用机制实例4
    查看>>
    Netty工作笔记0079---Log4j整合到Netty
    查看>>
    Netty工作笔记0081---编解码器和处理器链梳理
    查看>>
    Netty工作笔记0083---通过自定义协议解决粘包拆包问题1
    查看>>
    Netty工作笔记0084---通过自定义协议解决粘包拆包问题2
    查看>>
    Netty工作笔记0085---TCP粘包拆包内容梳理
    查看>>
    Netty常用组件一
    查看>>