文章目录

免费个人运维知识库,欢迎您的订阅:literator_ray.flowus.cn

注1:如果nginx位于负载均衡器,squid,nginx反向代理之后,web服务器无法直接获取到客户端真实的IP地址了。 $remote_addr获取反向代理的IP地址。反向代理服务器在转发请求的http头信息中,可以增加X-Forwarded-For信息,用来记录 客户端IP地址和客户端请求的服务器地址。

注2:使用 sort -k8 /var/log/nginx/access.log | less 查看 耗时的请求, -k后的数字表示排序的字段 第几列

user  nginx;

worker_processes  2;  # 服务器CPU数量,建议设置为CPU总核数
worker_cpu_affinity auto;  # 自动分配使用的CPU数量 
worker_rlimit_nofile 65535; # 一个nginx进程打开的最多文件,理论值应该是最多打开文件数(系统的值ulimit -n)与nginx进程数相除,但是nginx分配请求并不均匀,所以建议与ulimit -n的值保持一致。

error_log  /var/log/nginx/error.log warn; # 全局错误日志定义类型:[debug | info | notice | warn | error | crit]
pid        /var/run/nginx.pid; # 进程文件

# 工作模式与连接数上限
events {
    use epoll; #  参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型是Linux 2.6以上版本内核中的高性能网络I/O模型,如果跑在FreeBSD上面,就用kqueue模型
    worker_connections  10240; # 单个进程最大连接数(最大连接数=连接数*进程数)
}


http {
    include       /etc/nginx/mime.types; # 文件扩展名与文件类型映射表
    default_type  application/octet-stream; # 默认文件类型

    # remote_addr、http_x_forwarded_for:远程地址,记录客户端IP地址
    # remote_user:远程用户,记录客户端用户名称
    # time_local:本地时间,服务器自身时间
    # request:请求,记录请求的URL和HTTP协议
    # status:状态,记录请求状态
    # body_bytes_sent:发送给客户端的字节数,不包括响应头大小;该变量与Apache模块mod_log_config里的“%B”参数兼容
    # bytes_sent:发送给客户端的总字节数
    # connection:连接的序列号
    # connection_requests:当前通过一个连接获得的请求数量
    # msec:日志写入时间,单位为秒,精度是毫秒
    # pipe:如果请求是通过HTTP流水线(pipelined)发送,pipe值为“p”,否则为“.”
    # http_referer:记录从哪个页面链接访问过来的(超链接)(如果不是从超链接跳转过来的,日志处为"-")
    # http_user_agent:记录客户端浏览器相关信息
    # request_length:请求的长度(包括请求行,请求头和请求正文)
    # request_time:请求处理时间,单位为秒,精度毫秒;从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止
    # time_iso8601:ISO8601标准格式下的本地时间
    # time_local:通用日志格式下的本地时间
    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; # 定义本机nginx访问日志及路径

    #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,
    #必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
    sendfile        on; # 开启高效文件传输模式
    #tcp_nodelay    on; # 防止网络阻塞
    #tcp_nopush     on; # 防止网络阻塞

    keepalive_timeout  65; # 连接超时时间,单位是秒   

    client_max_body_size 5m; # 允许客户端请求的最大单字节文件字节数(即单个文件上传大小的最大限制)

    gzip  on; # 开启gzip压缩输出
    gzip_min_length 1k; # 最小压缩文件大小
    # gzip_buffers 4 16k; # 压缩缓冲区
    gzip_http_version 1.1; # 压缩版本
    gzip_comp_level 5; # 压缩等级
    gzip_types text/css text/javascript text/xml text/plain application/json application/javascript application/x-javascript application/xml application/xml+rss; # 压缩类型,默认包含text/html,写上去也没问题,但是会有一个warn
    gzip_disable "MSIE [1-6]\."; # 指定的客户端禁用gzip功能。我们设置成IE6或者更低版本以使我们的方案能够广泛兼容
    gzip_vary on; # 开启限制IP连接数的时候需要用

    proxy_cache_path /var/cache/nginx/cache levels=1:2 keys_zone=cache:100m inactive=1d max_size=10g;

    # nginx的waf生效相关配置
    lua_shared_dict limit 10m;
    init_by_lua_file /etc/nginx/waf/init.lua;
    access_by_lua_file /etc/nginx/waf/waf.lua;

    server_tokens off; # 此配置并不会让nginx执行的速度更快,但它可以关闭在错误页面中的nginx版本数字,对于安全性是有好处

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

请不要以此视为定论,这只是我的个人经验

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐