本文章介绍了本人工作过程中使用的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;
}
}
}
总结:这个项目中日常会使用到的一些参数,可以帮助到家,对大家有记得点赞哦!!!