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