本文章介绍了本人工作过程中使用的nginx服务作为反向代理的配置,并针对很多配置了相关的说明及解析的,重要信息是进行了过滤,可以给大家进行参考使用。

很多配置仅供参考的,不做实际的生产环境使用的!!!


配置文件是nginx.conf,具体配置内容如下:

user nginx nginx;

#Nginx worker 进程运行的用户及用户组

语法:user username [groupname] 默认:user nobody nobody

作用及注意事项:

user 用于设置 master 进程启动后,fork 出的 worker 进程运行在哪个用户和用户组下。
当按照“user username;”设置时,用户组与用户名相同。
若用户在 configure 命令执行时使用了参数 --user=username 和 --group=groupname,此时 nginx.conf 将使用参数中指定的用于和用户组。

worker_processes  2;
worker_cpu_affinity 01 10;

优化性能的配置项

Nginx worker 进程个数

语法:worker_processes number; 默认:worker_processes 1;

在 master/worker 运行方式下,定义 worker 进程的个数。

绑定 Nginx worker 进程指定的 CPU 内核

语法:worker_cpu_affinity cpumask [cpumask...] 例子: worker_processes 4; worker_cpu_affinity 1000 0100 0010 0001; 注:这里几核就是几位二进制的数字的,2位就是01 10的,最多是8位的,切记,

error_log  logs/error.log;

error 日志的设置

语法:error_log /path/file  level; 默认:error_log logs/error.log error;

设置 error 日志的路径和级别。路径设置为 /dev/null,这样就不会输出任何日志了,这也是关闭 error 日志的唯一手段;路径也可以是 stderr,这样日志输出到标准错误文件中。
level 是日式的输出级别,取值范围是 debug、info、notice、warn、error、crit、alert、emerg,从左到右级别依次增大。

pid        /app/nginx/conf/nginx.pid;

pid 文件路径

语法:pid path/file; 默认:pid logs/nginx.pid;

保存 master 进程 ID 的 pid 文件存放路径。

worker_rlimit_nofile 65535;

是nginx的work工作进程打开最多文件描述符数目的限制

语法:worker_rlimit_nofile number;

events {
    use epoll;
    worker_connections  10240;
}

use-选择时间模型

语法:use [kqueue | rtsig | epoll | /dev/poll | select | poll | eventport]; 默认:Nginx 会自动使用最适合的事件模型。

worker_connections-每个 worker 的最大连接数

定义每个 worker 进程可以同时处理的最大连接数。

语法:worker_connections number;


如下是http模块的内容,这里比较分散的解析了,完整的配置最后会拿出来的。

http {
    include       mime.types;
    default_type  application/octet-stream;
    server_tokens off;    
    gzip on;
    gzip_min_length 1k;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_comp_level 2;
    gzip_types  text/css text/xml application/javascript application/atom+xml application/rss+xml text/plain appl
ication/json application/x-javascript application/xml text/javascript;
    gzip_disable "MSIE [0-6]\.";
    gzip_vary on;

(1)include-嵌入其他配置文件

语法:include /path/file

路径参数既可以是绝对路径,也可以是相对路径。参数的值可以是一个明确的文件名,也可以是含有通配符*的文件名,同时可以嵌入多个配置文件。

这里的是嵌入了types的文件


(2)default_type-默认 MIME type

语法:default_type MIME-type; 默认:default_type text/plain; 配置块:http server location

当找不到相应的 MIME type 与文件扩展名之间的映射时,使用默认的 MIME type 作为 HTTP header 中的 Content-Type。


(3)server_tokens-返回错误页面时是否在 Server 中注明 Nginx 版本

语法:server_tokens on | off; 默认:server_tokens on; 配置块:http server location

(4)gzip-压缩配置

nginx服务是否采用gzip压缩的形式来发送数据

语法:gzip on | off 默认:gzip off

gzip_min_length-当返回内容大于此值时才会使用gzip进行压缩,以K为单位,当值为0时,所有页面都进行压缩

语法: gzip_min_length length; 默认:gzip_min_length 20; 配置模块: http, server, location

gzip_buffers-设置用于处理请求压缩的缓冲区数量和大小。比如32 4K表示按照内存页(one memory page)大小以4K为单位(即一个系统中内存页为4K),申请32倍的内存空间。建议此项不设置,使用默认值

语法: gzip_buffers number size; 默认: gzip_buffers 32 4k|16 8k; 配置模块: http, server, location

gzip_http_version-用于识别http协议的版本,早期的浏览器不支持gzip压缩,用户会看到乱码,所以为了支持前期版本加了此选项。默认在http/1.0的协议下不开启gzip压缩。

语法: gzip_http_version 1.0 | 1.1; 默认: gzip_http_version 1.1; 配置模块: http, server, location

gzip_comp_level-设置gzip压缩级别,级别越底压缩速度越快文件压缩比越小,反之速度越慢文件压缩比越大

语法: gzip_comp_level level; 默认: gzip_comp_level 1; 配置模块: http, server, location

gzip_types-设置需要压缩的MIME类型,如果不在设置类型范围内的请求不进行压缩

语法: gzip_types mime-type ...; 默认: gzip_typestext/html; 配置模块: http, server, location

gzip_disable-通过表达式,表明哪些UA头不使用gzip压缩

语法: gzip_disable regex ...; 默认: — 配置模块: http, server,locationThis directive appearedinversion 0.6.23.

gzip_vary-增加响应头”Vary: Accept-Encoding”告诉接收方发送的数据经过了压缩处理,开启后的效果是在响应头部添加了Accept-Encoding:gzip,这对于本身不支持gzip压缩的客户端浏览器有用。

语法: gzip_varyon |off; 默认: gzip_vary off; 配置模块: http, server, location


注:继续在http模块下的配置


server_names_hash_bucket_size 128;
    client_header_buffer_size 1k;
    large_client_header_buffers 4 8k;
    client_max_body_size 6G;
    client_body_timeout  5;
    client_header_timeout 20;

    open_file_cache max=65535 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;

server_names_hash_bucket_size-为了提高快速寻找到相应 server name 的能力,Nginx 使用散列表来存储 server name。server_names_hash_bucket_size 设置了每个散列桶的内存大小。

语法:server_names_hash_bucket_size size; 默认:server_names_hash_bucket_size 32|64|128; 配置块:http、sever、location

client_header_buffer_size-存储 HTTP 头部的内存 buffer 大小

语法:client_header_buffer_size size; 默认:client_header_buffer_size 1k; 配置块:http server

large_client_header_buffers-是假设(请求行+请求头)的大小如果超过client_header_buffer_size的配置大小,则以large_client_header_buffers配置为准

语法: large_client_header_buffers number size; 默认: large_client_header_buffers 4 8k; 配置模块: http, server

假设large_client_header_buffers的配置为4 8k,则对请求有如下要求

请求行(request line)的大小不能超过8k,否则返回414错误
请求头(request header)中的每一个头部字段的大小不能超过8k,否则返回400错误(实际是494错误,但nginx统一返回400了)
 

client_max_body_size-HTTP 请求包体的最大值

语法:client_max_body_size size; 默认:client_max_body_size 1m; 配置块:http server location

浏览器在发送含有较大 HTTP 包体的请求时,其头部会有一个 Content-Length 字段,client_max_body_size 是用来限制 Content-Length 所示值的大小的。


client_body_timeout-读取 HTTP 包体的超时时间

语法:client_body_timeout time(默认单位:秒); 默认:client_body_timeout 60; 配置块:http server location

client_header_timeout-读取 HTTP 头部的超时时间,超时返回480。

语法:client_header_timeout time (默认单位:秒); 默认:client_header_timeout 60; 配置块:http server location

open_file_cache-打开文件缓存

语法:open_file_cache max = N[inactive = time] | off; 默认:open_file_cache off; 配置块:http server location

文件缓存会在内存中存储以下 3 种信息。

     1)文件句柄、文件大小和上次修改时间。      2)已经打开过的目录结构。      3)没有找到的或者没有权限操作的文件信息。

这样,通过读取缓存就减少了对磁盘的操作。该配置项后面跟3中参数。

1)max:表示在内存中存储元素的最大个数。当达到最大限制数量后,将采用 LRU(Least Recently Used)算法从缓存中淘汰最近最少使用的元素。 2)inactive:表示在 inactive 制定的时间段内没有被访问过的元素将会被淘汰。默认时间为60秒。 3)off:关闭缓存功能。

open_file_cache_valid-检验缓存中元素有效性的频率,默认为每 60 秒检查一次缓存中的元素是否仍有效。

语法:open_file_cache_valid time; 默认:open_file_cache_calid 60s; 配置块:http server location

open_file_cache_min_uses-不被淘汰的最小访问次数

语法:open_file_cache_min_uses number; 默认:open_file_cache_min_uses 1; 配置块:http server location

它与 open_file_cache 中的 inactive 参数配合使用。如果在 inactive 指定的时间内,访问次数超过了 open_file_cache_min_uses 制定的最少次数,那么将不会淘汰出缓存。


注:继续http模块的配置


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;

nginx如果要解析php脚本语言,就必须通过配置fastcgi模块来提供对php支持,该项目后端服务是涉及到PHP脚本语言的,所以nginx需要配置fastcgi

fastcgi_connect_timeout-描述nginx与后端fastcgi server连接超时时间

语法: fastcgi_connect_timeout 时间(单位为s) 默认值: fastcgi_connect_timeout 60s 配置模块: http server location

fastcgi_send_timeout-描述nginx向后端传送请求超时时间(指已完成两次握手后向fastcgi传送请求超时时间)

语法: fastcgi_send_timeout 时间(单位为s) 默认值: fastcgi_send_timeout 60s; 配置模块: http server location

fastcgi_read_timeout-描述nginx接受后端fastcgi响应请求超时时间 (指已完成两次握手后nginx接受fastcgi响应请求超时时间)

语法: fastcgi_read_timeout 时间(单位为s) 默认值: fastcgi_read_timeout 60s; 配置模块: http server location

fastcgi_buffer_size-描述nginx读取fastcgi响应第一部分需要用多大的缓冲区,这个值表示将使用一个64kb的缓冲区响应第一部分应答(应答头)可以设置为fastcgi_buffers缓存区大小

语法: fastcgi_buffer_size size (单位为k,一般为4的整数倍) 默认: fastcgi_buffer_size 4k|8K 配置模块: http server location

fastcgi_buffers-指nginx需要用多大的缓冲区缓冲fastcgi的应答请求(整个应答)

语法: fastcgi_buffers num size (单位为k,一般为4的整数倍) 默认值: fastcgi_buffers 8 4k|8K 配置模块: http server location

fastcgi_busy_buffers_size-整个数据请求需要多大的缓存区,建议设置为fastcgi_buffers值的两倍

语法:fastcgi_busy_buffers_size size (单位为K,一般为fastcgi_buffers值的2倍) 默认值: fastcgi_busy_buffers 8k|16K 配置模块: http server location

fastcgi_temp_file_write_size-写入缓存文件使用多大的数据块,默认值是fastcgi_buffer值的2倍

语法:fastcgi_temp_file_write_size size (单位为K,一般为fastcgi_buffers值的两倍) 默认值: fastcgi_temp_file_write_size 8k|16K 配置模块: http server location


注:继续http模块


proxy_http_version 1.1;
    proxy_buffer_size 16k; 
    proxy_buffers 8 1M;
    proxy_busy_buffers_size 2M;
    rewrite_log on;
    proxy_connect_timeout 600s;
    proxy_connect_read_timeout 600s;
    proxy_connect_send_timeout 600s;
    client_body_buffer_size  512k;
    proxy_max_temp_file_size 5120m;
    proxy_temp_file_write_size 1M;
    proxy_buffering    off;
    proxy_request_buffering off;
    proxy_temp_path   /app/servers/nginx/proxy_temp;
    proxy_cache_path  /app/servers/nginx/proxy_temp/cache levels=2:2:2   keys_zone=cache_go:200m inactive=5d max_size=7g;
  
    log_format  access  '$time_iso8601|$http_x_forwarded_for|$remote_addr|$http_host|$request_time|'
                    '$upstream_response_time|"$request"|$status|$body_bytes_sent|$request_length|'
                    '"$http_referer"|"$http_user_agent"|$upstream_addr|"$http_cookie"| $upstream_cache_status |';
  
    access_log  logs/access_http.log  access;
    sendfile        on;
    tcp_nopush      on;
    tcp_nodelay     on;
    keepalive_timeout  65;
    send_timeout       600;

nginx在代理是默认http版本为1.0,由于文件的下载涉及到使用分块传递,但http1.0是不支持这个特性的。所以服务端为1.1版本无法进行转发,所以需要配置http的版本为1.1

proxy_http_version 1.1

语法:proxy_http_version 1.0 | 1.1 默认:proxy_http_version 1.0; 配置模块:http,server,location

proxy_buffers-设置缓冲区的大小和数量,从被代理的后端服务器取得的响应内容,会放置到这里. 

语法:proxy_buffers  数量  大小 默认值:proxy_buffers 8  4k/8k 配置模块:http,server,location

proxy_buffer_size-设置缓冲区大小,从代理后端服务器取得的第一部分的响应内容

语法:proxy_buffer_size  the size 默认值:proxy_buffer_size 4k/8k 配置模块:http,server,location

proxy_busy_buffers_size-用来控制同时传输到客户端的buffer数量的大小

语法:proxy_busy_buffers_size                大小 默认值:proxy_busy_buffers_size  一般是proxy_buffer_size配置的两倍 配置模块:http,server,location,if

rewrite_log-配置是否开启URL重写日志的输出功能

语法:rewrite_log on|off; 默认值:rewrite_log off; 配置模块:http、server、location、if

proxy_connect_timeout-后端服务器连接的超时时间_发起握手等候响应超时时间

语法: proxy_connect_timeout time  默认值:proxy_connect_timeout 60s 配置模块: http server location

proxy_connect_read_timeout-定义客户端从代理服务器读取响应的超时时间
proxy_connect_send_timeout-设置客户端将请求传输到代理服务器的超时时间

这里设置了客户端到代理服务器的时间,是适用于upstream模块的


client_body_buffer_size-如果请求的数据小于client_body_buffer_size直接将数据先在内存中存储。如果请求的值大于client_body_buffer_size小于client_max_body_size,就会将数据先存储到临时文件中,在哪个临时文件中呢?client_body_temp 指定的路径中,默认该路径值是/tmp/.

语法: client_body_buffer_size size; 默认: client_body_buffer_size 8k|16k; 配置模块: http, server, location

proxy_max_temp_file_size-设置临时文件的最大容量,在nginx打开响应缓冲以后,如果整个响应不能存放在proxy_buffer_size和proxy_buffers指令设置的缓冲区内,部分响应可以存放在临时文件中。 而每次写入临时文件的数据量则由proxy_temp_file_write_size指令定义。
写入硬盘的临时文件的大小,如果超过了这个值, Nginx将与Proxy服务器同步的传递内容, 而不再缓冲到硬盘. 设置为0时,将禁止响应写入临时文件,也就相当于直接关闭硬盘缓冲。

语法: proxy_max_temp_file_size size; 默认值: proxy_max_temp_file_size 1024m; 配置模块: http, server, location

proxy_temp_file_write_size- 设置nginx每次写数据到临时文件的size(大小)限制,在nginx开启缓冲后端服务器响应到临时文件的功能后,size的默认值是proxy_buffer_size指令和proxy_buffers指令定义的每块缓冲区大小的两倍, 而临时文件最大容量由proxy_max_temp_file_size指令设置

语法: proxy_temp_file_write_size size; 默认值: proxy_temp_file_write_size 8k|16k; 配置模块: http, server, location

proxy_buffering-用来控制是否打开后端响应内容的缓冲区,如果这个设置为off,那么proxy_buffers和proxy_busy_buffers_size这两个指令将会失效。 但是无论proxy_buffering是否开启,对proxy_buffer_size都是生效的

语法: proxy_buffering on|off 默认值: proxy_buffering on 配置模块: http, server, location

proxy_request_buffering-启用还是禁用客户端请求正文的缓冲

语法: proxy_request_buffering on | off 默认: proxy_request_buffering on 配置模块:http、server、location

启用缓冲后,在将请求发送到代理服务器之前,将从客户端读取整个请求正文,
禁用缓冲时,请求主体在收到时会立即发送到代理服务器,如果nginx已经开始发送请求到主体了,无法将请求发送下一个服务器


proxy_temp_path-定义一个目录,用于存储包含从代理服务器接收的数据的临时文件。指定目录下最多可以使用三级子目录层次结构

语法: proxy_temp_path path [level1 [level2 [level3]]]; 默认: proxy_temp_path proxy_temp; 配置模块:http, server, location

proxy_cache_path-定义缓存文件存放的路径

语法: proxy_cache_path path [levels=levels] keys_zone=name:size [inactive=time] [max_size=size] [loader_files=number] [loader_sleep=time] [loader_threshold=time]; 默认值: — 配置模块: http

path:指定缓存文件目录,和 proxy_temp_path 最好设置在同一文件分区下,建议将缓存和proxy_temp_path指令设置的临时文件目录放在同一文件系统。
level:定义了缓存的层次结构,每层可以用1(最多16中选择,0-f)或2(最多256种选择,00-ff)表示,中间用 [冒号] 分隔。“levels=1:2”表示开启1、2层级(第2层级理论有16*256个目录)。

keys_zone:指定一个共享内存空间zone,所有活动的键和缓存数据相关的信息都被存放在共享内存中,这样nginx可以快速判断一个request是否命中或者未命中缓存,1m可以存储8000个key,10m可以存储80000个key;
inactive:inactive=30m 表示 30 分钟没有被访问的文件会被 cache manager 删除,inactive的默认值是10分钟。 需要注意的是,inactive和expired配置项的含义是不同的,expired只是缓存过期,但不会被删除,inactive是删除指定时间内未被访问的缓存文件
max_size:cache存储的最大尺寸,如果不指定,会用掉所有磁盘空间,当尺寸超过,将会基于LRU算法移除数据,以减少占用大小。


log_format-用来定义记录日志的格式(可以定义多种日志格式,取不同名字即可)

语法:log_format 日志名称 日志格式

常见的日志格式变量有如下:

log_format格式变量: $remote_addr #记录访问网站的客户端地址 $remote_user #远程客户端用户名 $time_local #记录访问时间与时区 $request #用户的http请求起始行信息 $status #http状态码,记录请求返回的状态码,例如:200、301、404等 $body_bytes_sent #服务器发送给客户端的响应body字节数 $http_referer #记录此次请求是从哪个连接访问过来的,可以根据该参数进行防盗链设置。 $http_user_agent #记录客户端访问信息,例如:浏览器、手机客户端等 $http_x_forwarded_for #当前端有代理服务器时,设置web节点记录客户端地址的配置,此参数生效的 前提是代理服务器也要进行相关的x_forwarded_for设置

access_log-用来指定日至文件的路径及使用的何种日志格式记录日志

语法:access path 日志名称

sendfile-系统调用

语法:sendfile on | off 默认:sendfile off; 配置块:http server location

可以启用 Linux 上的 sendfile 系统调用来发送文件,它减少了内核态与用户态之间的两次内存复制,这样就会从磁盘中读取文件后直接在内核态发送到网卡设备,提高了发送文件的效率。


tcp_nopush-必须在sendfile打开的状态下才会生效,主要是用来提升网络包的传输'效率'

语法:tcp_nopush on|off 默认:tcp_nopush off; 配置块:http server location

tcp_nodelay-必须在keep-alive连接开启的情况下才生效,来提高网络包传输的'实时性'

语法:tcp_nodelay on|off; 默认值:tcp_nodelay on; 配置模块:http、server、location

keepalive_timeout-超时时间

语法:keepalive_timeout time(默认单位:秒); 默认:keepalive_timeout 75; 配置块:http server location

send_timeout-发送响应的超时时间

语法:send_timeout time; 默认:send_timeout 60; 配置块:http server location

注:还是在http模块下

upstream gw-api-7004 {
            server 192.178.14.9:7004  max_fails=3 fail_timeout=30s;
            server 192.178.14.10:7004 max_fails=3 fail_timeout=30s;
    }

upstream 块

     语法:upstream name {...}      配置块:http

upstream 块定义了一个上游服务器的集群,便于反向代理中的 proxy_pass 使用。例如:

upstream backend {           server backend1.example.com;           server backend2.example.com;           server backend3.example.com; }

server {
        listen       80;
        server_name  localhost;

        rewrite ^(.*)$  https://$host$1 permanent;
    }

listen:监听的端口

语法:listen ip:port/port

server_name服务名称,可以是域名,也可以IP地址的,也可以的localhost

rewrite跳转地址

语法:rewrite <正则表达式> <跳转后的内容> [rewrite支持的flag标记]^:匹配输入字符串的起始位置 $:匹配输入字符串的结束位置 *****:匹配前面的字符零次或多次 +:匹配前面的字符一次或多次 ?:匹配前面的字符零次或一次 .:匹配除\n之外的任何单个字符 使用[.\n]可以匹配包括\n在内的任意字符 ****:转义符 \d:匹配纯数字 {n}:重复n次 {n,}:重复n次或更多次 [c]:匹配单个字符c [a-z]:匹配a-z小写字母的任意一个 [a-zA-Z]:匹配a-z小写字母或A-Z大写字母的任意一个

server {
        listen       443;
        server_name  api.yufa.com;

        ssl on;
        root html;
        index index.html index.htm;
        ssl_certificate   /app/cert/yufa.com.pem;
        ssl_certificate_key  /app/cert/yufa.com.key;
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;

        allow 171.10.0.0/16;
        allow 171.11.0.0/16;
        allow 171.120.0.0/16;
        allow 171.191.0.0/16;
        allow 171.201.0.0/16;
        allow 100.33.0.0/16;
        allow 100.1.10.12;
        allow 100.100.249.11;
        deny all;

        location / {
             proxy_http_version 1.1;
             proxy_set_header Upgrade $http_upgrade;
             proxy_set_header Connection "upgrade";
             proxy_set_header X-real-ip $remote_addr;
             proxy_set_header Host $host;
             proxy_buffering off;

             proxy_pass  http://gw-api-7004;
             }    

        location /publish {
             proxy_http_version 1.1;
             proxy_set_header Upgrade $http_upgrade;
             proxy_set_header Connection "upgrade";
             proxy_set_header X-real-ip $remote_addr;
             proxy_set_header Host $host;

             proxy_pass  http://api.app.yufa.fy.cn:8008;
             }

        location /config/server/configs {
             proxy_http_version 1.1;
             proxy_set_header Upgrade $http_upgrade;
             proxy_set_header Connection "upgrade";
             proxy_set_header X-real-ip $remote_addr;
             proxy_set_header Host $host;

             proxy_pass  http://yufa.app.yufa.yf.cn:8001;
             }

        location /nginx_status {
             stub_status on;
             access_log off;
             allow 127.0.0.1;
             allow 100.0.0.0/8;
             deny all;
        }
    }

}

ssl on-开启ssl认证

root-以 root 方式设置资源路径

语法:root path; 默认:root html; 配置块:http server location if

index-访问首页

语法:index file ...; 默认:index index.html; 配置块:http server location

有时,访问站点时的 URI 是 /,这是一般是返回网站的首页,而这与 root 和 alias 都不同。这里用 ngx_http_index_module 模块提供的 index 配置实现


ssl_certificate

ssl_certificate_key

ssl证书存放的位置

语法: ssl_certificate path/*.pem ssl_certificate_key path/*.key

ssl_session_timeout--ssl认证超时时间

语法:ssl_session_timeout $time

ssl_ciphers-ssl认证的加密套件内容

语法: ssl_ciphers ciphers; 默认: ssl_ciphers HIGH:!aNULL:!MD5; 配置模块: http, server

ssl_protocolsssl配置的协议

语法: ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2] [TLSv1.3]; 默认: ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 配置模块: http, server

ssl_prefer_server_ciphers-配置服务器密码是否优先客户端密码

语法:ssl_perfer_server_ciphers on| off; 默认值:ssl_perfer_server_ciphers off; 配置模块:http、server

allow和deny--是配置哪些网络或者是具体的IP地址能够访问该nginx服务

语法: allow address | CIDR | unix: | all; 默认值: — 配置段: http, server, location, limit_except语法: deny address | CIDR | unix: | all; 默认值: — 配置段: http, server, location, limit_except

proxy_http_version-http协议的版本,这里采用的是1.1的


proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header X-real-ip $remote_addr; proxy_set_header Host $host;

请求头的作为反向代理需要进行转换和获取客户端地址

proxy_pass--需要代理到后端的服务的地址,这里采用了upstream模块的名称


location /nginx_status {

.........

}

这里表示是查询nginx服务的状态信息


完整的配置如下:仅供参考

user nginx nginx;

worker_processes  2;
worker_cpu_affinity 01 10;

error_log  logs/error.log;

pid        /app/nginx/conf/nginx.pid;
worker_rlimit_nofile 65535;

events {
    use epoll;
    worker_connections  10240;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    server_tokens off;    
    gzip on;
    gzip_min_length 1k;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_comp_level 2;
    gzip_types  text/css text/xml application/javascript application/atom+xml application/rss+xml text/plain appl
ication/json application/x-javascript application/xml text/javascript;
    gzip_disable "MSIE [0-6]\.";
    gzip_vary on;

    server_names_hash_bucket_size 128;
    client_header_buffer_size 1k;
    large_client_header_buffers 4 8k;
    client_max_body_size 6G;
    client_body_timeout  5;
    client_header_timeout 20;

    open_file_cache max=65535 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;
	
    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;
	
    proxy_http_version 1.1;
    proxy_buffer_size 16k; 
    proxy_buffers 8 1M;
    proxy_busy_buffers_size 2M;
    rewrite_log on;
    proxy_connect_timeout 600s;
    proxy_connect_read_timeout 600s;
    proxy_connect_send_timeout 600s;
    client_body_buffer_size  512k;
    proxy_max_temp_file_size 5120m;
    proxy_temp_file_write_size 1M;
    proxy_buffering    off;
    proxy_request_buffering off;
	
    proxy_temp_path   /app/servers/nginx/proxy_temp;
    proxy_cache_path  /app/servers/nginx/proxy_temp/cache levels=2:2:2   keys_zone=cache_go:200m inactive=5d max_size=7g;
  
    log_format  access  '$time_iso8601|$http_x_forwarded_for|$remote_addr|$http_host|$request_time|'
                    '$upstream_response_time|"$request"|$status|$body_bytes_sent|$request_length|'
                    '"$http_referer"|"$http_user_agent"|$upstream_addr|"$http_cookie"| $upstream_cache_status |';
  
    access_log  logs/access_http.log  access;
    sendfile        on;
    tcp_nopush      on;
    tcp_nodelay     on;
    keepalive_timeout  65;
    send_timeout       600;
	
    upstream gw-api-7004 {
            server 192.178.14.9:7004  max_fails=3 fail_timeout=30s;
            server 192.178.14.10:7004 max_fails=3 fail_timeout=30s;
    } 
	
    server {
        listen       80;
        server_name  localhost;

        rewrite ^(.*)$  https://$host$1 permanent;
    }
	
    server {
        listen       443;
        server_name  api.yufa.com;

        ssl on;
        root html;
        index index.html index.htm;
        ssl_certificate   /app/cert/yufa.com.pem;
        ssl_certificate_key  /app/cert/yufa.com.key;
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;

        allow 171.10.0.0/16;
        allow 171.11.0.0/16;
        allow 171.120.0.0/16;
        allow 171.191.0.0/16;
        allow 171.201.0.0/16;
        allow 100.33.0.0/16;
        allow 100.1.10.12;
        allow 100.100.249.11;
        deny all;

        location / {
             proxy_http_version 1.1;
             proxy_set_header Upgrade $http_upgrade;
             proxy_set_header Connection "upgrade";
             proxy_set_header X-real-ip $remote_addr;
             proxy_set_header Host $host;
             proxy_buffering off;

             proxy_pass  http://gw-api-7004;
             }    

        location /publish {
             proxy_http_version 1.1;
             proxy_set_header Upgrade $http_upgrade;
             proxy_set_header Connection "upgrade";
             proxy_set_header X-real-ip $remote_addr;
             proxy_set_header Host $host;

             proxy_pass  http://api.app.yufa.fy.cn:8008;
             }

        location /config/server/configs {
             proxy_http_version 1.1;
             proxy_set_header Upgrade $http_upgrade;
             proxy_set_header Connection "upgrade";
             proxy_set_header X-real-ip $remote_addr;
             proxy_set_header Host $host;

             proxy_pass  http://yufa.app.yufa.yf.cn:8001;
             }

        location /nginx_status {
             stub_status on;
             access_log off;
             allow 127.0.0.1;
             allow 100.0.0.0/8;
             deny all;
        }
    }

}

总结:这个项目中日常会使用到的一些参数,可以帮助到家,对大家有记得点赞哦!!!