Skip to content

HTTP模块

HTTP模块是Nginx的核心模块,用于处理HTTP请求。

基本配置

HTTP模块

nginx
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;

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

完整配置

生产环境配置

nginx
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" '
                    '$request_time $upstream_response_time';

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

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;

    # 客户端缓冲区
    client_body_buffer_size 128k;
    client_max_body_size 10m;
    client_header_buffer_size 1k;
    large_client_header_buffers 4 4k;

    # Gzip压缩
    gzip on;
    gzip_vary on;
    gzip_min_length 1000;
    gzip_comp_level 6;
    gzip_types text/plain text/css text/xml text/javascript application/json application/javascript application/xml+rss;

    # 代理设置
    proxy_connect_timeout 60;
    proxy_send_timeout 60;
    proxy_read_timeout 60;
    proxy_buffer_size 4k;
    proxy_buffers 4 32k;
    proxy_busy_buffers_size 64k;

    # 上游设置
    upstream backend {
        server 192.168.1.10:8080;
        server 192.168.1.11:8080;
    }

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

常用指令

sendfile

nginx
sendfile on;

说明:

  • 启用高效文件传输
  • 减少内核态和用户态的拷贝
  • 推荐启用

tcp_nopush

nginx
tcp_nopush on;

说明:

  • 启用tcp_nopush
  • 减少网络包数量
  • 提高传输效率

tcp_nodelay

nginx
tcp_nodelay on;

说明:

  • 启用tcp_nodelay
  • 减少延迟
  • 提高响应速度

keepalive_timeout

nginx
keepalive_timeout 65;

说明:

  • Keep-Alive超时时间
  • 默认值:65
  • 推荐值:60-120

完整示例

生产环境配置

nginx
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" '
                    '$request_time $upstream_response_time';

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

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;

    # 客户端缓冲区
    client_body_buffer_size 128k;
    client_max_body_size 10m;
    client_header_buffer_size 1k;
    large_client_header_buffers 4 4k;

    # Gzip压缩
    gzip on;
    gzip_vary on;
    gzip_min_length 1000;
    gzip_comp_level 6;
    gzip_types text/plain text/css text/xml text/javascript application/json application/javascript application/xml+rss;

    # 代理设置
    proxy_connect_timeout 60;
    proxy_send_timeout 60;
    proxy_read_timeout 60;
    proxy_buffer_size 4k;
    proxy_buffers 4 32k;
    proxy_busy_buffers_size 64k;

    # 上游设置
    upstream backend {
        server 192.168.1.10:8080;
        server 192.168.1.11:8080;
    }

    # 虚拟主机
    server {
        listen 80;
        server_name www.example.com;

        root /var/www/html;
        index index.html;

        location / {
            try_files $uri $uri/ =404;
        }
    }

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

常见问题

静态文件无法访问

原因: root或index配置错误

解决: 检查root和index配置

nginx
root /var/www/html;
index index.html;

代理超时

原因: proxy_read_timeout设置过小

解决: 增加proxy_read_timeout

nginx
proxy_read_timeout 120;

总结

HTTP模块的关键点:

  • sendfile:启用高效文件传输
  • tcp_nopush:减少网络包数量
  • tcp_nodelay:减少延迟
  • keepalive_timeout:设置合理的超时时间
  • 缓冲区:设置合理的缓冲区大小
  • 代理设置:设置合理的代理超时和缓冲区

合理配置HTTP模块,提高Nginx性能。