nginx反向代理与负载均衡详解
反向代理
tcp/udp对应 steam 模块
应用层 可以反向代理很多服务,可以是php,python ,go http ,grpc等等
proxy_pass url;
带/ 与不带/的区别
1location /bbs/{
2 proxy_pass http://127.0.0.1:8080;
3}
4
5用户请求 /bbs/abc/test.html
6请求到达nginx 的url /bbs/abc/test.html
7请求达到上游应用服务器的url /bbs/abc/test.html
1location /bbs/{
2 proxy_pass http://127.0.0.1:8080/;
3}
4
5用户请求 /bbs/abc/test.html
6请求到达nginx 的url /bbs/abc/test.html
7请求达到上游应用服务器的url: /abc/test.html
nginx接受用户请求包体的处理方式
proxy_request_buffering on |off;
on. 吞吐量高 ,上游服务器处理并发能力低。
更及时的响应、减少磁盘io
client_max_body_size size
上下文 http 、server、location
client_body_buffer_size size;
上下文 http、server、location
当请求体 content-length > client_max_body_size 413 request too large
请求体大小(content-length) < client_body_buffer_size,请求存储到内存中 ,请求成功
当 请求体大小(content-length) < client_max_body_size , > client_body_buffer_size,请求体会存到磁盘 client_body_temp_path 。
client_body_temp_path path [level1] [level2]
client_body_in_file_only on|off ;
开启则都放到磁盘上
client_body_timeout time;
client_body_timeout 60s;
具体见 nginx常用模块 这篇文章
steam反代
注意内容:
nginx.conf
1load_module /usr/lib/nginx/modules/ngx_stream_module.so;
2include /etc/nginx/sites-enabled/*.tcp;
下面是gitlab ssh拉取代码的反代配置
1stream{
2 tcp_nodelay on;
3 log_format proxy '$remote_addr:$remote_port [$time_local] '
4 '$protocol $status $bytes_sent $bytes_received '
5 '$session_time "$upstream_addr" '
6 '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';
7 upstream sshgitlab {
8 server 127.0.0.1:9022; #这里IP是虚拟机的,对应虚拟机的IP+Port
9 }
10 server {
11 listen 8022 so_keepalive=on;
12 proxy_connect_timeout 1h;
13 proxy_timeout 1h;
14 proxy_pass sshgitlab;
15 access_log /var/log/nginx/xxx.log proxy;
16 }
17}
负载均衡
当我们的应用单例不能支撑用户请求时,此时就需要扩容,从一台服务器扩容到两台、几十台、几百台,我们需要一个入口,将客户端请求均衡分布在后台的多个服务器上。
负载均衡在服务端开发中算是一个比较重要的特性,nginx提供的负载均衡可以实现上游服务器的负载均衡、故障转移、失败重试、容错、健康检查,当某些上游服务器出现问题时,可以将请求转到其它的上游服务器从而保障高可用。
第一步我们需要给nginx配置上游服务器,即负载均衡到真实的处理业务的服务器
通过在http指令下配置upstream即可。
语法: upstream name { … }
默认值: —
上下文: http
指令集
- | - |
---|---|
upstream | 段名,以 {开始,} 结束 ,中间是定义上游服务器的url |
server | 定义上游服务器地址 |
zone | 定义共享内存、用于跨worker子进程 |
keepalive | 对上游服务 启用长连接 |
keepalive_requests | 一个长连接最大请求个数 |
keepalive_timeout | 空闲情况下,一个长连接的超时时长 |
Hash | hash 负载均衡 |
Ip_hash | 根据ip hash 负载均衡 |
Least_conn | 最小连接数负载均衡 |
Least_time | 最短时间负载均衡 |
Random | 随机负载均衡 |
upstream 指令当中包含server指令
语法: server address [parameters];
默认值: —
上下文: upstream
可以定义下面的参数:
weight=number
设定服务器的权重,默认是1,权重越大被访问机会越大,要根据机器的配置情况来配置
max_fails=number
设定Nginx与服务器通信的尝试失败的次数。在fail_timeout参数定义的时间段内,如果失败的次数达到此值,Nginx就认为服务器不可用。在下一个fail_timeout时间段,服务器不会再被尝试。 失败的尝试次数默认是1。
可以通过指令proxy_next_upstream 和memcached_next_upstream来配置什么是失败的尝试。 默认配置时,http_404状态不被认为是失败的尝试。
fail_timeout=time
统计失败尝试次数的时间段。在这段时间中,服务器失败次数达到指定的尝试次数,服务器就被认为不可用。默认情况下,该超时时间是10秒。
backup
标记为备用服务器。当主服务器不可用以后,请求会被传给这些服务器,配置这个指令可以实现故障转移。
down
标记服务器永久不可用,可以跟ip_hash指令一起使用。
当访问Nginx时,会将请求反向代理到backend配置的upstream server。
max_conns=number
上游服务器最大并发链接数
配置示例
1upstream back_end {
2 server 127.0.0.1:8080 weight=3 max_conns=1000 fail_timeout=10s max_fails=2;
3 keepalive 32;
4 keepalive_request 50;
5 keepalive_timeout 30s;
6}
以前公司的例子
1upstream backend {
2 server 10.64.1.106:80 weight=8; # fn1042
3 server 10.64.1.107:80 weight=8; # fn1043
4 server 10.64.1.110:80 weight=10; # fn1046
5 server 10.64.1.111:80 weight=10; # fn1047
6 server 10.64.1.146:80 weight=10; # fn1051
7}
8
9server {
10 listen 443;
11 server_name xxx.com;
12 root /dev/null;
13
14 ssl on;
15 ssl_certificate /xxx.cert.pem;
16 ssl_certificate_key /xxxx.key.pem;
17
18 location / {
19 proxy_set_header X-Real-IP $remote_addr;
20 proxy_set_header Host $host;
21 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
22 proxy_set_header X-Request-Uuid $request_uuid;
23 proxy_pass http://huan_api;
24 }
25
26 location /v1/wechat/upload {
27 proxy_set_header X-Real-IP $remote_addr;
28 proxy_set_header Host $host;
29 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
30 proxy_set_header X-Request-Uuid $request_uuid;
31 proxy_pass http://huan_upload;
32 }
33
34 location /m {
35 proxy_set_header Host $host;
36 proxy_pass http://huan_h5;
37 }
38 }
负载均衡的方法
nginx支持以下负载均衡机制:
1、 轮询
默认轮训方式
每一个来自网络中的请求,轮流分配给内部的服务器,从1到N然后重新开始。此种负载均衡算法适合服务器组内部的服务器都具有相同的配置并且平均服务请求相对均衡的情况。
2、加权轮询
通过weight参数控制权重
根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请求。例如:服务器A的权值被设计成1,B的权值是3,C的权值是6,则服务器A、B、C将分别接受到10%、30%、60%的服务请求。此种均衡算法能确保高性能的服务器得到更多的使用率,避免低性能的服务器负载过重。
3、IP Hash
在upstream当中配置ip_hash;
这种方式通过生成请求源IP的哈希值,并通过这个哈希值来找到正确的真实服务器。这意味着对于同一主机来说他对应的服务器总是相同。使用这种方式,你不需要保存任何源IP。
将客户端会话"沾住"或者"持久化",以便总是能选择特定服务器,那么可以使用ip-hash负载均衡机制。
使用ip-hash时,客户端IP地址作为hash key使用,用来决策选择服务器集群中的哪个服务器来处理这个客户端的请求。这个方法保证从同一个客户端发起的请求总是定向到同一台服务器,除非服务器不可用。
1upstream backend {
2 ip-hash;
3 server 10.64.1.106:80;
4 server 10.64.1.107:80;
5 server 10.64.1.110:80;
6 server 10.64.1.111:80;
7 server 10.64.1.146:80;
8}
4、最少连接数
在upstream当中配置least_conn
实现最少连接数
客户端的每一次请求服务在服务器停留的时间可能会有较大的差异,随着工作时间加长,如果采用简单的轮循或随机均衡算法,每一台服务器上的连接进程可能会产生极大的不同,并没有达到真正的负载均衡。最少连接数均衡算法对内部中需负载的每一台服务器都有一个数据记录,记录当前该服务器正在处理的连接数量,当有新的服务连接请求时,将把当前请求分配给连接数最少的服务器,使均衡更加符合实际情况,负载更加均衡。
1upstream backend {
2 zone test 10M; //内存 连接数 内存
3 least_conn;
4 server 10.64.1.106:80;
5 server 10.64.1.107:80;
6 server 10.64.1.110:80;
7 server 10.64.1.111:80;
8 server 10.64.1.146:80;
9}
5、Hash
1upstream backend {
2 hash $key; # $key 是可以 通过request_uri 匹配出来的 如商品id 值, set $key $1 这样获得
3 server 10.64.1.106:80;
4 server 10.64.1.107:80;
5 server 10.64.1.110:80;
6 server 10.64.1.111:80;
7 server 10.64.1.146:80;
8}
失败重试
通过配置上游服务器max_fails和 fail_timeout,指定每个上游服务器,当fail_timeout时间内失败了max_fails次请求,则认为该上游服务器不可用/不存活,然后这段时间将不会访问这台上游服务器,fail_timeout时间后会再次进行重试。
max_fails=2 fail_timeout=30s 这2个一起搭配使用,表示:当失败2次的时候,就停止使用30秒
好处:
既可以避免重复请求,不能访问或者暂时不能访问的服务,增大服务器的压力,也可以灵活的做到当服务器可用时再次访问。
proxy_next_upstream 指令
在nginx的配置文件中,proxy_next_upstream 项定义了什么情况下进行重试
语法: proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 http_503 | http_504 |http_404 | off …;
默认值: proxy_next_upstream error timeout;
上下文: http, server, location
其中: error 表示和后端服务器建立连接时,或者向后端服务器发送请求时,或者从后端服务器接收响应头时,出现错误。 timeout 表示和后端服务器建立连接时,或者向后端服务器发送请求时,或者从后端服务器接收响应头时,出现超时。 invalid_header 表示后端服务器返回空响应或者非法响应头 http_500 表示后端服务器返回的响应状态码为500
…………. off 表示停止将请求发送给下一台后端服务器
重试不能无限制进行,因此,需要如下两个指令控制重试次数和重试超时时间
proxy_next_upstream_tries number:设置重试次数,默认0表示不限制,注意此重试次数指的是所有请求次数(包括第一次和之后的重试次数之和)。
proxy_next_upstream_timeout time:设置重试最大超时时间,默认0表示不限制。
即在proxy_next_upstream_timeout时间内允许proxy_next_upstream_tries次重试。如果超过了其中一个设置,则Nginx也会结束重试并返回客户端响应(可能是错误码)。
proxy_send_timeout 后端服务器数据回传时间(代理发送超时时间)
proxy_read_timeout 连接成功后,后端服务器响应时间(代理接收超时时间)
proxy_connect_timeout nginx连接后端的超时时间,一般不超过75s
1
2 upstream backend {
3 #ip_hash; #哈希
4 #least_conn; #最少连接数
5 server nginx.xxx.com:9502 max_fails=3 fail_timeout=5s;
6 #server nginx.xxx.com:9503 backup max_fails=3 fail_timeout=5s;#back 备份服务器
7 #server nginx.xxx.com:9503 down max_fails=3 fail_timeout=5s; #down 永久宕机
8 server nginx.xxx.com:9502 max_fails=3 fail_timeout=5s;
9 server nginx.xxx.com:9502 max_fails=3 fail_timeout=5s;
10 }
11 location /up {
12 proxy_next_upstream timeout; #超时切换到下一台服务器,注意备用服务器切换问题
13 #超时时间
14 proxy_connect_timeout 20; # nginx连接后端的超时时间,一般不超过75s
15 proxy_send_timeout 30; # 后端服务器数据回传时间(代理发送超时时间)
16 proxy_read_timeout 30; # 连接成功后,后端服务器响应时间(代理接收超时时间)
17 proxy_next_upstream_tries 2; #代理请求的重试次数
18 proxy_next_upstream_timeout 2; #重试的超时时间
19 proxy_pass http://backend;
20}
backup(故障转移)
标记为备用服务器。当主服务器不可用以后,请求会被传给这些服务器
1 upstream backend {
2 #ip_hash; #哈希
3 #least_conn; #最少连接数
4 server nginx.23673.com:9502 max_fails=3 fail_timeout=5s; #此服务现在不可用
5 server nginx.23673.com:9503 backup; #备胎服务器, 9502不可用才使用9503
6 }
7
8 location /up {
9 #proxy_next_upstream timeout; #超时切换到下一台服务器,注意备用服务器切换问题,使用备胎服务器这个必须关闭
10 #超时时间
11 proxy_connect_timeout 20;
12 proxy_send_timeout 30;
13 proxy_read_timeout 30;
14 proxy_next_upstream_tries 1; #代理请求的重试次数
15 proxy_next_upstream_timeout 1; #重试的超时时间
16 proxy_pass http://backend;
17 }
down
标记服务器永久不可用,可以跟ip_hash指令一起使用。
1 upstream backend {
2 #ip_hash; #哈希
3 #least_conn; #最少连接数
4 server nginx.23673.com:9502 max_fails=3 fail_timeout=5s;
5 server nginx.23673.com:9503 down max_fails=3 fail_timeout=5s; //这台肯定不能使用了
6
7 }
动态负载均衡
微博开源的,大厂适用。
nginx-upsync-module 提供了动态的负载均衡,动态更新上游的服务器不需要 reload nginx ,它的功能是拉取 consul 的后端 server 的列表,并更新 Nginx 的路由信息。此模块不依赖于任何第三方模块。 consul 作为 Nginx 的 db,利用 consul 的 KV 服务,每个 Nginx work 进程独立的去拉取各个
upstream 的配置,并更新各自的路由。 挂了第三方模块无法结束进程或者是当前进程尚未结束。
nginx -s reload 是平滑重启,不会强制结束正在工作的连接,需要等所有连接都结束才会重启。想象一个场景上线繁忙,想要多添加几台服务器处理更多的 流量
改配置文件并重新启动 Nginx 可能并不总是很方便。 例如,当遇到大流量和高负载,重启 Nginx 并在此时重新加载配置会进一步增加系统负载,并可能暂时 降低性能
1nx,它的功能是拉取 consul 的后端 server 的列表,并更新 Nginx 的路由信息。此模块不依赖于任何第三方模块。 consul 作为 Nginx 的 db,利用 consul 的 KV 服务,每个 Nginx work 进程独立的去拉取各个 upstream 的配置,并更新各自的路由。
2
3wget https://github.com/weibocom/nginx-upsync-module/archive/v2.1.0.tar.gz
4
5--add-module=/root/nginx-upsync-module-2.1.0
6
7 示例:
8upstream swoole_test {
9 # 使用动态负载均衡 ,异步更新 持久化到 upsync_dump_path对应到配置文件中
10 upsync 127.0.0.1:8700/v1/kv/upstreams/swoole_test upsync_timeout=6m upsync_interval=500ms upsync_type=consul strong_dependency=off;
11 upsync_dump_path /usr/local/nginx/conf/servers_test.conf;
12 include /usr/local/nginx/conf/servers_test.conf;
13}
14
15
16upsync模块会去consul拉取最新的upstream信息并存到本地的文件中
17upsync_timeout 配置从consul拉取上游服务器的超时时间
18upsync_interval 配置从consul拉取上游服务器的间隔时间
19upsync_type 指定使用配置服务器的类型,当前是consul
20strong_dependency 启动时是否强制依赖配置服务器,如果配置为on,则拉取失败,nginx同样会启用失败
21
22upsync_dump_path 指定从consul拉取的上游服务器后持久化到的位置,这样即使Consul服务器出问题了,本地同样会有备份
添加的时候要注意名称模块的匹配:
安装consul
1 #对于consul的介绍可以移步到另外的文档,暂时先了解就行,我们可以先通过docker的方式pull一个consul
2
3 curl -X PUT -d '{"weight":1, "max_fails":2, "fail_timeout":10}' http://$consul_ip:$port/v1/kv/$dir1/$upstream_name/$backend_ip:$backend_port
4
5 curl -X PUT -d '{"weight":1,"max_fails":2,"fail_timeout":10}' http://127.0.0.1:8700/v1/kv/upstreams/swoole_test/127.0.0.1:9501
6
7
8 curl -X PUT -d '{"weight":1,"max_fails":2,"fail_timeout":10}' http://127.0.0.1:8700/v1/kv/upstreams/swoole_test/127.0.0.1:9502
9
10#查看所有已经存储的k/v
11 curl http://127.0.0.1:8700/v1/kv/?recurse
12#删除
13 curl -X DELETE http://127.0.0.1:8700/v1/kv/upstreams/swoole_test/127.0.0.1:9501
测试nginx.conf 内容如下
1
2user root;
3worker_processes 1;
4#跟cpu核数一致
5
6#error_log logs/error.log;
7#error_log logs/error.log notice;
8#error_log logs/error.log info;
9
10#pid logs/nginx.pid;
11events {
12 worker_connections 1024;
13}
14
15
16http {
17
18 #limit_req_zone 113.246.155.223 zone=one:1m rate=1r/s;
19
20 include mime.types;
21 default_type application/octet-stream;
22 log_format main '$remote_addr - $remote_user [$time_local] "$request" '
23 '$status $body_bytes_sent "$http_referer" '
24 '"$http_user_agent" "$http_x_forwarded_for"';
25
26 #access_log /usr/local/nginx/logs/access.log main;
27
28 sendfile on;
29 #tcp_nopush on;
30
31 #keepalive_timeout 0;
32 keepalive_timeout 65;
33
34 #gzip on;
35
36 #include /usr/local/nginx/conf/default/*.conf;
37
38
39 #判断客户端地址是否在白名单列表,如果在返回0在白名单列表,否则返回1
40 geo $white {
41 default 1;
42 #include '/conf/ip.conf';
43 127.0.0.1/32 0;
44 192.168.1.0/24 0;
45
46 }
47
48 #如果满足条件返回二进制ip地址
49 map $white $limit {
50 1 $binary_remote_addr;
51 0 "";
52 }
53
54 map $request_uri $no_cache {
55 default 0;
56 ~*/admin 1; #uri当中包含了admin
57 }
58
59
60 limit_req_zone $limit zone=two:10m rate=1r/s;
61 limit_req_status 503;
62 limit_req_log_level info;
63
64 #设置缓存目录
65 proxy_cache_path /usr/local/nginx/cache levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=10s use_temp_path=off;
66
67 upstream backend {
68 #ip_hash; #哈希
69 #least_conn; #最少连接数
70 server nginx.23673.com:9502 max_fails=3 fail_timeout=5s;
71 #server nginx.23673.com:9503 backup max_fails=3 fail_timeout=5s;
72 #server nginx.23673.com:9503 down max_fails=3 fail_timeout=5s;
73 server nginx.23673.com:9502 max_fails=3 fail_timeout=5s;
74 server nginx.23673.com:9502 max_fails=3 fail_timeout=5s;
75 }
76
77 upstream swoole_test {
78 # 得有一台固定的
79 server nginx.23673.com:9500 max_fails=3 fail_timeout=5s;
80 upsync 127.0.0.1:8700/v1/kv/upstreams/swoole_test upsync_timeout=20s upsync_interval=500ms upsync_type=consul strong_dependency=off;
81 upsync_dump_path /usr/local/nginx/conf/servers_test.conf; # 生成配置文件
82 include /usr/local/nginx/conf/servers_test.conf; # 引入生成的配置文件 ,得先建立个空文件不然报错。
83 }
84
85 server {
86 listen 80;
87 server_name nginx.23673.com;
88 access_log /usr/local/nginx/logs/$host main;
89 set $cachePATH "/cache/";
90
91 gzip on;
92 gzip_comp_level 6;
93 gzip_types application/javascript text/css;
94
95 #查看上游服务器列表
96 location = /upstream_show {
97 upstream_show;
98 }
99
100 location /test_stream {
101 proxy_pass http://swoole_test;
102 }
103
104
105
106 location /up {
107 #proxy_next_upstream timeout; #超时切换到下一台服务器,注意备用服务器切换问题
108 #超时时间
109 proxy_connect_timeout 20;
110 proxy_send_timeout 30;
111 proxy_read_timeout 30;
112
113 proxy_next_upstream_tries 1; #代理请求的重试次数
114 proxy_next_upstream_timeout 1; #重试的超时时间
115
116 proxy_pass http://backend;
117 }
118
119
120 #缓存清除
121 location ~ /purge(/.*) {
122 allow 127.0.0.1;
123 deny all;
124 proxy_cache_purge my_cache $host$1$is_args$args;
125 #default_type text/html;
126 #return 200 $host$1$is_args$args;
127 #error_page 404 /404.html;
128 }
129
130 location ^~ /cache {
131 proxy_http_version 1.1;
132 proxy_pass http://127.0.0.1:9502;
133 #设置当前请求是否缓存
134 #proxy_cache_bypass $no_cache;
135
136 #default_type text/html;
137 #return 200 $host$uri$is_args$args;
138 #请求头设置
139 proxy_set_header X-Real-IP $remote_addr;
140 proxy_set_header connection keep-alive;
141 proxy_set_header REMOTE-HOST $remote_addr;
142 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
143
144 #时间设置
145 proxy_connect_timeout 30;
146 proxy_send_timeout 30;
147 proxy_read_timeout 60;
148
149 proxy_cache my_cache; #开启缓存了
150 proxy_cache_valid 200 302 10s; #不同的响应头设置不同缓存时间
151 proxy_cache_valid 404 1s;
152
153 #设置缓存key
154 proxy_cache_key $host$uri$is_args$args;
155 #proxy_ignore_headers Cache-Control;
156
157 proxy_cache_min_uses 3; #至少3次之后才会缓存
158 proxy_cache_lock on; #如果说是并发情况下,只会有一个请求落到后端服务器
159
160 }
161
162
163 location / {
164 #limit_req zone=one burst=3 nodelay;
165 root /www;
166
167 #limit_req zone=two;
168 #default_type text/html;
169 #return 200 "$limit";
170 index nginx.23673.html index.htm;
171
172 }
173
174 #~* \.(gif|jpeg|jpg|mp3)$
175
176 #location ^~ /img/ {
177 # alias /www/img/;
178 #alias /www/img/1.jpg 正则匹配出完整路径
179 # expires 10s;
180 # access_log off;
181
182 #}
183
184 #正则匹配的形式
185 location ~* (.*)(\.gif|jpeg|jpg|mp3)$ {
186 alias /www/img/$1$2;
187 #alias /www/img/1.jpg 正则匹配出完整路径
188 expires 10s;
189 access_log off;
190 }
191
192 # server_name_in_redirect off;
193
194 location /if {
195
196 #if ( $http_user_agent ~* (mobile|nokia|iphone|ipad|android|samsung|htc|blackberry) ) {
197 # rewrite ^(.*) http://peter.23673.com$1 permanent;
198 #}
199
200 #匹配文件不存在
201 #if (!-e $request_filename) {
202 #proxy_pass http://127.0.0.1:9501;
203 #}
204 }
205
206 #隐藏index.php xxxx/api/public/index.php -> xxxx/api/aa/bb
207 location /api {
208 #匹配文件不存在
209 #if (!-e $request_filename) {
210
211 #}
212 #rewrite ^/api/(.*)$ /api/public/index.html/$1 break;
213 #框架根据请求地址,路由
214 #rewrite ^/api/(.*)$ /abc/public/index.html/$1 last; 隐藏了真实的路径
215
216 }
217
218
219 location /abc/ {
220 root /www;
221 }
222
223 location /ecshop {
224 root /www;
225 #商品页面
226 # /ecshop/goods-3.html ---->/ecshop/goods.php?id=3
227 rewrite goods-(\d+)\.html$ /ecshop/goods.php?id=$1 break;
228
229 # 栏目页面
230 #/ecshop/category-2-b1.html -> /ecshop/category.php?id=3&brand=1
231
232
233 }
234
235
236 #location ~.*\.(sql|log|txt|jar|war|sh|py|php) {
237 # deny all;
238 #}
239
240 location /test {
241 root /www;
242 allow 47.98.147.49;
243 deny 192.168.1.0/24;
244 deny 113.246.155.223;
245 deny all;
246 #index nginx.23673.html index.htm;
247 }
248 #location ^~ /test {
249 # default_type text/html;
250 # return 200 'test';
251 #}
252
253
254
255
256
257
258 #error_page 404 /404.html;
259
260 # redirect server error pages to the static page /50x.html
261 #
262 error_page 500 502 503 504 /50x.html;
263 location = /50x.html {
264 root html;
265 }
266 }
267
268
269 # another virtual host using mix of IP-, name-, and port-based configuration
270 #
271 #server {
272 # listen 8000;
273 # listen somename:8080;
274 # server_name somename alias another.alias;
275
276 # location / {
277 # root html;
278 # index index.html index.htm;
279 # }
280 #}
281
282
283 # HTTPS server
284 #
285 #server {
286 # listen 443 ssl;
287 # server_name localhost;
288
289 # ssl_certificate cert.pem;
290 # ssl_certificate_key cert.key;
291
292 # ssl_session_cache shared:SSL:1m;
293 # ssl_session_timeout 5m;
294
295 # ssl_ciphers HIGH:!aNULL:!MD5;
296 # ssl_prefer_server_ciphers on;
297
298 # location / {
299 # root html;
300 # index index.html index.htm;
301 # }
302 #}
303
304}