nginx配置文件详解

nginx配置文件结构

main		全局设置

events{		工作模式,连接配置
	...
}
http{		http的配置
	...
	upstream xxx{	负载均衡配置
		...
	}
	server{		主机设置
		...
		location xxx{	URL匹配
			...
		}
	}
}

main块

# worker进程运行的用户和组
user root [root];

# 指定Nginx开启的子进程数,多核CPU建议设置和CPU数量一样的进程数
worker_processes auto;

# 用来定义全局错误日志文件,通常放在var中,level有 debug,info,notice,warn,error,crit
error_log /var/log/nginx/error.log info;

# 指定进程id的存储文件位置
pid /run/nginx.pid;

# 一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(系统的值ulimit -n)与nginx进程数相除,但是nginx分配请求并不均匀,所以建议与ulimit -n的值保持一致。
# 如果worker_rlimit_nofile的值小于worker_connections的值,会报如下错误:
# worker_connections exceed open file resource limit: xxx
worker_rlimit_nofile 65535;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

# 守护进程,默认为on
# 在容器环境下最好配置为off,不然以守护进程启动则会异常退出
daemon off;

events块

# 指定工作模式和以及连接上限
events {
    # use       指定nginx工作模式
    # [epoll]   高效工作模式,linux
    # [kqueue]  高效工作模式,bsd
    # [poll]    标准模式
    # [select]  标准模式
    use epoll;
    
    # worker_connections    定义nginx每个进程的最大连接数
    # 正向代理              连接数 * 进程数
    # 反向代理              连接数 * 进程数 / 4
    # linux系统限制最多能同时打开65535个文件,默认上限就是65535,可解除 ulimit -n 65535
    # 单个进程最大连接数(最大连接数=连接数*进程数)
    worker_connections 65535;
}

http块

最核心的模块,主要负责http服务器相关配置,包含server,upstream子模块,常见配置如下:

http {

    # 日志格式,配置escape=json使能显示中文
    log_format  main escape=json  '$remote_addr - "$http_referer" - $remote_user [$time_local] - "$request" "$http_user_agent" - '
                      '$status - $request_time $upstream_response_time - $request_length $body_bytes_sent - '
                      '"$query_string" - "$request_body"';

    # 日志文件地址
    access_log  /var/log/nginx/access.log  main;

    # 每秒5个请求
    # limit_req_zone $binary_remote_addr zone=addr:10m rate=5r/s;
    
    # 设置文件的mime类型,mime.types是文件扩展名与文件类型映射表
    include             /etc/nginx/mime.types;
    
    # 默认响应类型,二进制流
    default_type        application/octet-stream;

    charset utf-8; #默认编码    

    # 包含其它配置文件,分开规划解耦
    # include xxxconfig; 
    include /etc/nginx/conf.d/*.conf;

    # 设置高效文件传输模式
    sendfile            on;

    # 该指令必须在sendfile打开的状态下才会生效,主要是用来提升网络包的传输'效率',防止网络堵塞
    tcp_nopush          on;    

    # 设置客户端连接活跃超时,也就是长连接超时时间,单位是秒
    keepalive_timeout   65;
  
    # 该指令必须在keep-alive连接开启的情况下才生效,来提高网络包传输的'实时性',也是为了防止网络堵塞
    tcp_nodelay         on;
    
	# 开启gzip压缩输出
    # gzip              on;

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

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    
    #upstream的负载均衡,weight是权重,可以根据机器配置定义权重。weigth参数表示权值,权值越高被分配到的几率越大。
    upstream myServer {
        server 192.168.80.121:80 weight=3;
        server 192.168.80.122:80 weight=2;
        server 192.168.80.123:80 weight=3;
    }

    # server用来指定虚拟主机
    server {
		
    }
    
    # server用来指定虚拟主机
    server {
		
    }

日志配置

当配置 Nginx 日志格式时,可以使用以下占位符来记录不同的信息。这里是列举的大部分 Nginx 日志占位符及其解释:

  • $remote_addr: 客户端的 IP 地址。
  • $remote_user: 客户端的用户名(如果启用了基本身份验证)。
  • $time_local: 请求发生的本地时间,格式为 [day/month/year:hour:minute:second zone]
  • $request: 完整的 HTTP 请求行。
  • $status: 响应的 HTTP 状态码。
  • $body_bytes_sent: 响应的字节数,不包括响应头的大小。
  • $http_referer: 请求头中的 Referer 字段,指示请求的来源 URL。
  • $http_user_agent: 请求头中的 User-Agent 字段,标识发起请求的客户端应用程序。
  • $request_time: 完成请求的时间,以秒为单位。
  • $upstream_response_time: 反向代理服务器的响应时间,以秒为单位。
  • $upstream_addr: 反向代理服务器的地址。
  • $host: 请求的主机名。
  • $server_name: Nginx 服务器的名称。
  • $uri: 请求的 URI。
  • $request_method: 请求的 HTTP 方法。
  • $http_x_forwarded_for: 从请求头中获取的客户端真实 IP 地址(如果存在)。
  • $ssl_protocol: 使用的 SSL/TLS 协议版本。
  • $ssl_cipher: 使用的 SSL/TLS 加密套件。
  • $request_length: 请求的字节数,包括请求头和请求体。
  • $bytes_sent: 发送给客户端的总字节数,包括响应头和响应体。
  • $connection: 客户端与服务器之间的连接 ID。
  • $request_id: 请求的唯一 ID,用于跟踪日志。
  • $scheme: 请求的协议方案(例如,http 或 https)。
  • $arg_name: URL 查询参数的值,其中 name 是参数名。
  • $request_body : 请求体内容

gzip配置

http {
    #开启gzip压缩输出
    gzip on; 
          
    #最小压缩文件大小
    gzip_min_length 1k; 
    
    #压缩缓冲区
    gzip_buffers 4 16k; 
    
    #压缩版本(默认1.1,前端如果是squid2.5请使用1.0)开始压缩的http协议版本(可以不设置,目前几乎全是1.1协议)
    gzip_http_version 1.0;
    
    #推荐6压缩级别(级别越高,压的越小,越浪费CPU计算资源)
    gzip_comp_level 2;
    
    #压缩类型,默认就已经包含text/html,所以下面就不用再写了,写上去也不会有问题,但是会有一个warn。
    gzip_types text/plain text/javascript  text/css application/javascript application/x-javascript application/xml application/x-httpd-php image/jpeg image/gif image/png;

    gzip_vary on;   # 是否传输gzip压缩标志
    
    # 禁用对用户代理为 Internet Explorer 16版本的请求进行压缩。
    gzip_disable "MSIE [1-6]\.";
    
    #开启限制IP连接数的时候需要使用
    #limit_zone crawler $binary_remote_addr 10m; 
}

缓存配置

在web服务种有一些静态资源响应很慢,这时可以配置缓存,将一些文件缓存在内存中。

只需要配置 proxy_cache_path proxy_cache 就可以开启内容缓存,前者用来设置缓存的路径和配置,后者用来启用缓存,一个简单的配置如下:

http {
    ...
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;

    server {
        # 当前块全部开启缓存
        proxy_cache mycache;
        location / {
            proxy_pass http://localhost:8000;
        }
    }
}

配置proxy_cache_path

在http 块中加入如下配置:

http {
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;
}
  • /var/cache/nginx表示缓存文件保存的路径
  • levels/var/cache/nginx设置了一个两级层次结构的目录。将大量的文件放置在单个目录中会导致文件访问缓慢,所以针对大多数部署,我们推荐使用两级目录层次结构。如果 levels 参数没有配置,则 NGINX 会将所有的文件放到同一个目录中。
  • keys_zone=my_cache:10m 缓存区域的名称是my_cache,设置了一个共享的内存区,该内存区用于存储缓存键和元数据,有些类似计时器的用途。将键的拷贝放入内存可以使 NGINX 在不检索磁盘的情况下快速决定一个请求是 HIT 还是 MISS,这样大大提高了检索速度。一个 1MB 的内存空间可以存储大约 8000 个 key,那么上面配置的 10MB 内存空间可以存储差不多 80000 个key。
  • max_size 设置了缓存的上限(在上面的例子中是 10G)。这是一个可选项;如果不指定具体值,那就是允许缓存不断增长,占用所有可用的磁盘空间。当缓存达到这个上线,处理器便调用 cache manager 来移除最近最少被使用的文件,这样把缓存的空间降低至这个限制之下。
  • inactive 指定了项目在不被访问的情况下能够在内存中保持的时间。在上面的例子中,如果一个文件在 60 分钟之内没有被请求,则缓存管理将会自动将其在内存中删除,不管该文件是否过期。该参数默认值为 10 分钟(10m)。注意,非活动内容有别于过期内容。NGINX 不会自动删除由缓存控制头部指定的过期内容(本例中Cache-Control:max-age=120)。过期内容只有在 inactive 指定时间内没有被访问的情况下才会被删除。如果过期内容被访问了,那么 NGINX 就会将其从原服务器上刷新,并更新对应的 inactive 计时器。
  • use_temp_path=off nginx最初会将注定写入缓存的文件先放入一个临时存储区域, use_temp_path=off 命令指示 NGINX 将在缓存这些文件时将它们写入同一个目录下。比较建议将参数设置为 off 来避免在文件系统中不必要的数据拷贝。

配置proxy_cache

server {
    ...
    location / {
        proxy_cache my_cache;
        # proxy_cache_key "$host$request_uri$cookie_user";
        proxy_cache_min_uses 3;
        proxy_cache_methods GET HEAD POST;
        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 404      1m;
        # proxy_cache_valid any 5m;
        proxy_cache_bypass $http_pragma;
        proxy_cache_revalidate on;
        proxy_pass http://localhost:8000;
    }
}
  • proxy_cache my_cache表示使用之前定义的缓存区域。

  • proxy_cache_key 为指定缓存的 key,这个不推荐,示例是使用域名,请求url,用户 cookie 来当作 key,意味着一个页面将为不同的用户缓存 n 次,绝大多数情况不需要这样的操作。

  • proxy_cache_min_uses 为在缓存响应之前必须使用相同密钥的请求的最小次数。

  • proxy_cache_methods 为指定要被缓存的请求方式的响应值,默认为 GET 和 HEAD,新增其他的需要一起列出来,如上示例所示。

  • proxy_cache_valid 为响应状态码的缓存时间,可以分别为不同的状态码缓存指定时间,也可以使用 any 进行全部状态码的缓存,上述指令设置了针对状态码为200和302的响应的缓存有效期为10分钟(10m),400为1分钟,也就是说在接下来的10分钟内,对相同的请求直接返回缓存的响应,而不再向后端服务器发送请求。这有助于减轻后端服务器的负载并提高响应速度。

  • proxy_cache_bypass $http_pragma表示如果请求头有pragma,则会绕过缓存,直接向后端服务器发送请求并获取响应。

  • proxy_cache_revalidate on表示每次请求都会检查缓存是否过期。

Nginx 缓存相关进程

缓存中还涉及两个额外的NGINX进程:

  • cache manager 周期性地启动,检查高速缓存的状态。如果高速缓存大小超过 proxy_cache_path 中 max_size 参数设置的限制,则高速缓存管理器将删除最近访问过的数据。在两次缓存管理器启动的间隔,缓存的数据量可能短暂超过配置的大小。
  • cache loader 只运行一次,NGINX 开始之后。它将有关以前缓存的数据的元数据加载到共享内存区域。一次加载整个缓存可能会消耗足够的资源来在启动后的最初几分钟内降低 NGINX 的性能。要避免这种情况,请通过在 proxy_cache_path 指令中包含以下参数来配置缓存的迭代加载:
    • loader_threshold - 迭代持续时间,以毫秒为单位(默认情况下 200)
    • loader_files - 一次迭代期间加载的最大项目数(默认情况下 100)
    • loader_sleeps - 迭代之间的延迟,以毫秒为单位(默认情况下 50)

在以下示例中,迭代持续数300 毫秒或直到 200 个项目被加载进去:

proxy_cache_path /var/cache/nginx keys_zone=one:10m loader_threshold=300 loader_files=200;

清除缓存

官网:https://docs.nginx.com/nginx/admin-guide/content-cache/content-caching/

需要提前加一个配置,用于标识使用 HTTP PURGE 方法的请求并删除匹配的 URL 对应的缓存。

1.在 http {} 上下文中创建新变量,例如 $purge_method, 他依赖于 $request_method 变量:

http {
    ...
    map $request_method $is_purge {
        PURGE 1;
        default 0;
    }
}

2.在 location {} 块中,已经配置缓存的前提下,引入 proxy_cache_purge 参数来指定清除缓存请求的条件。例如在上一步指定的 $request_method

server {
    listen      80;
    server_name www.example.com;

    location / {
        proxy_pass  https://localhost:8000;
        proxy_cache mycache;
		...
        proxy_cache_purge $purge_method;
    }
}

3.配置完并使之生效之后,就可以发送一条 purge 请求来让缓存失效了,例如:

curl -X PURGE -D – "https://www.example.com/*"

在该示例中,将清除具有公共 URL 部分(由星号通配符指定)的资源。但这些缓存条目不会从缓存中完全删除。
它们会保留在磁盘上,直到它们被视为不活动(由proxy_cache_path 中的 inactive参数决定)的时候才完全删除,或缓存清除器(由 proxy_cache_path 中的 purge 决定),或客户端尝试访问它们的时候。

FastCGI配置

http {
	# 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;
}

upstream 块(在http块下,可配置多个)

轮询配置

  1. 在http节点下,加入upstream节点

    upstream myServer{ 
          server 10.0.6.108:7080; 
          server 10.0.0.85:8980; 
    }
    
  2. 将server节点下的location节点中的proxy_pass配置为:http:// + upstream名称,即

    location / { 
                root  html; 
                index  index.html index.htm; 
                proxy_pass http://myServer; 
    }
    
  3. 如今负载均衡初步完毕了。upstream依照轮询(默认)方式进行负载,每一个请求按时间顺序逐一分配到不同的后端服务器。假设后端服务器down掉。能自己主动剔除。尽管这样的方式简便、成本低廉。但缺点是:可靠性低和负载分配不均衡。

权重配置

weight(权重)指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。例如以下所看到的。10.0.0.88的访问比率要比10.0.0.77的访问比率高一倍。

upstream linuxidc{ 
      server 10.0.0.77 weight=5; 
      server 10.0.0.88 weight=10; 
}

ip_hash配置

ip_hash(访问ip),每一个请求按访问ip的hash结果分配。这样每一个访客固定访问一个后端服务器,能够解决session的问题。

upstream favresin{ 
     ip_hash; 
     server 10.0.0.10:8080; 
     server 10.0.0.11:8080; 
}

fair(第三方)配置

这是为更加智能的负载均衡算法,fail算法可以依据页面大小和加载时间长短智能地进行负载均衡,即根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身不支持 fair,使用需要下载配置Nginx的 upstream_fair模块。

 upstream favresin{      
      fair; 
      server 10.0.0.10:8080; 
      server 10.0.0.11:8080; 
}

url_hash(第三方)配置

url_hash(第三方),按访问url的hash结果来分配请求,使每一个url定向到同一个后端服务器。后端服务器为缓存时比较有效。

注意:在upstream中加入hash语句。server语句中不能写入weight等其他的參数,hash_method是使用的hash算法。

 upstream resinserver{ 
      server 10.0.0.10:7777; 
      server 10.0.0.11:8888; 
      hash $request_uri; 
      hash_method crc32; 
}

upstream配置状态参数

upstream还能够为每一个设备设置状态值,这些状态值的含义分别例如以下:

  • down:表示单前的server临时不參与负载。
  • weight :weight越大,负载的权重就越大。
  • backup:预留的备份机器,其他全部的非backup机器down或者忙的时候才会请求backup机器,所以这台机器压力会最轻。
  • max_fails:允许请求失败的次数,默认为1,超过最大次数,返回proxy_next_upstream 模块定义的错误。
  • fail_timeout: 在经历了max_fails(最大请求失败次数)次失败后,暂停服务的时间单位(若干)秒,配合max_fails一起使用。
upstream bakend{ #定义负载均衡设备的Ip及设备状态 
      ip_hash; 
      server 10.0.0.11:9090 down; 
      server 10.0.0.11:8080 weight=2; 
      server 10.0.0.11:6060 max_fails=2 fail_timeout=2; 
      server 10.0.0.11:7070 backup; 
}

server块(在http块下,可配置多个)

基础配置

 # server用来指定虚拟主机
    server {
        # 指定虚拟主机监听的端口
        listen      80 default_server;
        listen      [::]:80 default_server;
        # 指定网页的默认编码格式
        charset     utf-8;
        # 域名可以有多个,用空格隔开
        # server_name www.baidu.com www.souhu.com;
        # 日志格式设定
        # 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   xxx main;
        # 指定虚拟主机的错误日志存放路径
        # error_log   xxx main;
        # 指定这个虚拟主机的根目录
        # root  xxx;
        # 指定默认首页
        # index xxx;
        # 解决跨域问题,允许跨域访问的源地址信息,可以配置多个(多个用逗号分隔),也可以使用*代表所有源
        add_header Access-Control-Allow-Origin *;
        # add_header Access-Control-Allow-Headers X-Requested-With;
        # 允许跨域访问的请求方式,值可以为 GET POST PUT DELETE...,可以全部设置,也可以根据需要设置,多个用逗号分隔
        add_header Access-Control-Allow-Methods *;
        # 针对跨域资源共享的设置,设置预检请求的响应头
        add_header Access-Control-Allow-Headers X-Requested-With;
        # Load configuration files for the default server block.
        # include /etc/nginx/default.d/*.conf;

        # 核心中的核心,主要配置都在这
        # 主要功能:定位url,解析url,支持正则匹配,还能支持条件,实现动静分离
        # 语法
        # location [modifier] uri{
        #     ...
        # }
        # modifier 修饰符
        # = 使用精确匹配并且终止搜索
        # ~ 区分大小写的正则表达式
        # ~* 不区分大小写的正则表达式
        # ^~ 最佳匹配,不是正则匹配,通常用来匹配目录

        # ================下面为常用代理配置示例================
        
        # dist为vue打包后的h5文件夹
        location / {
          root /dist;
        }

        #设定查看Nginx状态的地址
        location /status{
        stub_status on;
        access_log on;
        # 设置认证,详情看后面的ngx_http_auth_basic_module模块
        auth_basic "your description";
        auth_basic_user_file /etc/nginx/auth;
        #htpasswd文件的内容可以用apache提供的htpasswd工具来产生。
        }

        # 反向代理,转发到java服务
        # ex:http:127.0.0.1:80/api/test/test1 -> http:base-auth:8080/test/test1
        #'/api/'后面的路径直接拼接到http://base-auth:8080/后面
        location /api/ {
          proxy_pass http://base-auth:8080/;
        }

        # ex:http:127.0.0.1:80/api/test/test1 -> http:base-auth:8080/test/test1
        # '^~ /api/'表示匹配前缀是api的请求,会把'/api/'后面的路径直接拼接到http://base-auth:8080/后面
        # location ^~ /api/ {
        #   proxy_pass http://base-auth:8080/;
        # }

    }

auth_basic 身份验证配置

ngx_http_auth_basic_module模块允许通过使用“HTTP基本认证”协议验证用户名和密码来限制对资源的访问。

访问还可以根据地址、子请求的结果或JWT进行限制。同时通过地址和密码限制访问由满足指令控制。

生成密码: openssl passwd
命令将输出一段对应的 Hash 值。
也可以使用更为复杂的 Hash 规则进行生成,如使用 apr1 算法:openssl passwd -apr1
在明文密码较长的情况下,需要使用后者。

在任意合适的位置,生成相应的用户名密码描述文件。文件的格式为:

# Comments
user1:password1
user2:password2:comment
user3:password3

例如,启用用户 admin,该用户的明文密码为 123456, 经过 Hash 处理之后的密码为 $apr1$dbjnVHtt$VuH8VTGpuo3vJdw3PXoGC0,则描述文件中的内容为:

admin:$apr1$dbjnVHtt$VuH8VTGpuo3vJdw3PXoGC0

在对应站点的配置文件中,加入如下类似的内容:

location / {
	auth_basic "your description";
    auth_basic_user_file <your_conf_file_path>;
}

其中,your_conf_file_path 填入你创建说明文件的绝对路径,同时,在已经要求身份认证的父目录下,可以对特定的子目录取消身份验证要求:

loaction <subroute_match_rules> {
	auth_basic off;
}

一个监控认证的示例

stub_status on;是一个用于启用 Nginx 的 Stub Status 模块的指令。Stub Status 模块提供了一种简单的方式来获取有关 Nginx 服务器当前状态的信息。

在 Nginx 配置中添加 stub_status on; 指令时,将启用 Stub Status 模块,并使其对外可用。

location /status {
            stub_status on;
            access_log on;
            auth_basic "nginx status";
            auth_basic_user_file /etc/nginx/auth;
        }

Stub Status 模块会将状态信息以文本格式返回给客户端,通过访问 Nginx 的 Stub Status 页面,可以获取到以下信息:

Active connections: 13 
server accepts handled requests
 24 24 12 
Reading: 0 Writing: 1 Waiting: 12 
  • Active connections: 当前活动的连接数。
  • Server accepts handled requests: 服务器总共接受的连接数、成功处理的连接数和请求数。
  • Reading/Writing/Waiting: 正在读取请求、正在响应请求和等待请求的连接数。
    Stub Status 页面对于监控和调试 Nginx 服务器非常有用。但请注意,由于 Stub Status 页面提供了敏感的服务器状态信息,因此请确保将其限制为仅允许受信任的 IP 地址或网络进行访问,以防止信息泄露或未经授权的访问。

location块(在server块下,可配置多个)

核心中的核心,以后的主要配置都在这

主要功能:定位url,解析url,支持正则匹配,还能支持条件,实现动静分离

语法
	location [modifier]  uri{
		...
	}

modifier 修饰符
	=	使用精确匹配并且终止搜索
	~	区分大小写的正则表达式
	~*	不区分大小写的正则表达式
	^~	最佳匹配,不是正则匹配,通常用来匹配目录
	
常用指令
	alias	别名,定义location的其他名字,在文件系统中能够找到,如果location指定了正则表达式,alias将会引用正则表达式中的捕获,alias替代lication中匹配的部分,没有匹配的部分将会在文件系统中搜索
    #"/" 启用反向代理
    location / {
    
      proxy_pass http://127.0.0.1:8088;
      
      # 使用http1.1
      proxy_http_version 1.1;
     
      # 设置代理服务器的请求头 Host 字段为当前请求的主机名。
      proxy_set_header Host $host;
      
      # 设置请求头信息。X-Real-IP 头会将客户端真实 IP 地址传递给后端服务器,X-Forwarded-For 头会将客户端真实 IP 地址添加到请求头中,以便后端服务器获取。
      proxy_set_header X-Real-IP $remote_addr;
      
      #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     
      #允许客户端请求的最大单文件字节数
      client_max_body_size 10m; 
      
      #缓冲区代理缓冲用户端请求的最大字节数
      client_body_buffer_size 128k; 

      #  禁用代理服务器对后端服务器返回的重定向进行修改
      proxy_redirect off;
      
      proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时 秒)
      
      proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时 秒)
      
      proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时 秒)
      
      proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
      
    }

密码

一个常用的nginx配置文件

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log info;
pid        /var/run/nginx.pid;


events {
    use epoll;
    worker_connections  65535;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    
    log_format  main escape=json  '$remote_addr - "$http_referer" - $remote_user [$time_local] - "$request" "$http_user_agent" - '
                      '$status - $request_time $upstream_response_time - $request_length $body_bytes_sent - '
                      '"$query_string" - "$request_body"';

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

    charset utf-8;

    sendfile        on;
    tcp_nopush      on;

    keepalive_timeout  65;
    tcp_nodelay        on;

    gzip               on;
    gzip_min_length    1k;
    gzip_comp_level     6;
    gzip_types         text/plain text/javascript  text/css application/javascript application/x-javascript application/xml application/x-httpd-php image/jpeg image/gif image/png;
    gzip_vary          on;
    gzip_disable "MSIE [1-6]\.";

    upstream document_api{ 
        server api:8080; 
    }

    server {
        listen      80 default_server;
        charset     utf-8;
        add_header Access-Control-Allow-Origin *;
        add_header Access-Control-Allow-Methods *;
        add_header Access-Control-Allow-Headers X-Requested-With;

        location / {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_connect_timeout      90;
            proxy_send_timeout         90;
            proxy_read_timeout         90;
            proxy_http_version 1.1;
            client_max_body_size  300M;
            proxy_pass http://document_api/;
        }

        location /NginxStatus {
            stub_status on;
            access_log on;
            auth_basic "NginxStatus";
            auth_basic_user_file /etc/nginx/auth;
        }
    }
}

你可能感兴趣的:(nginx,linux,nginx,服务器,运维)