nginx配置详解、端口重定向和504
发布日期:2025-04-20 23:32:19 浏览次数:4 分类:精选文章

本文共 4496 字,大约阅读时间需要 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 配置的各项功能模块,并提供了针对常见问题的解决方案。

    上一篇:nginx配置负载均衡
    下一篇:nginx配置详解

    发表评论

    最新留言

    很好
    [***.229.124.182]2025年04月27日 22时58分20秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章