Nginx 的常用配置,包括静态文件代理、Stream流代理、服务地址反向代理、负载均衡、跨域、证书
作用
-
静态资源服务
-
http/https 代理
-
stream 代理
-
负载均衡
常用命令
1
2
3
4
5
6
7
8
|
# 启动
nginx
# 停止
nginx -s stop
# 安全退出
nginx -s quit
# 重新加载配置文件
nginx -s reload
|
基础配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 负载均衡
upstream testsite {
server 127.0.0.1:8000;
server 127.0.0.1:8001;
}
server {
listen 80;
server_name localhost;
# 注意:"\"会和字母形成转义符,只能用 "\\" 或者 "/" 代表路径层级的分隔符
# 反向代理
location /testproxy/ {
# proxy_pass 最后带斜杠,则将 location 完全替换为 proxy_pass
proxy_pass http://127.0.0.1:8080/;
# proxy_pass 最后不带斜杠,则将 location 和 proxy_pass 进行拼接
# proxy_pass http://127.0.0.1:8080;
# 注: 反向代理中可以添加重定向去做动静分离
}
# 静态文件代理
location /test/ {
# 文件的路径会拼接 location,下面的会变成 D:/Tools/nginx/conf/test/
# root D:/Tools/nginx/conf/;
# alias 的路径便是文件路径
alias D:/Tools/nginx/conf;
# 一般设置需要 location 和 alias 都带斜杠或都不带
# 在网页上列出对应文件夹下的文件列表
autoindex on;
}
# 对应负载均衡的反向代理,这里 proxy_pass 的 testsite 与 upstream 的 testsite 保持一致
location /test2/ {
proxy_pass http://testsite/;
}
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
|
Stream代理
流量代理
1
2
3
4
5
6
7
8
9
10
11
|
# 代理127.0.0.1的3389端口到7000端口(可用于代理远程桌面)
stream {
server{
listen 7000;
proxy_pass 127.0.0.1:3389;
# 连接超时
proxy_connect_timeout 8s;
# 代理服务器超时
proxy_timeout 24h;
}
}
|
负载均衡
只列出了常用的轮询、权重、ip哈希三种方式,另外还有最少连接、随机、加权随机等。
注:配置放在根节点,与server一级
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# 轮询法
upstream gear-server {
server 127.0.0.1:9001;
servr 127.0.0.1:9002;
}
# 权重法
upstream gear-server {
server 127.0.0.1:9001 weight=1;
server 127.0.0.1:9002 weight=2;
server 127.0.0.1:9003 weight=1;
}
# ip哈希(会根据ip绑定访问同一服务器),比权重法多了个ip_hash
upstream gear-server {
ip_hash;
server 127.0.0.1:9001 weight=1;
server 127.0.0.1:9002 weight=2;
server 127.0.0.1:9003 weight=1;
}
|
Https配置(自定义证书)
OpenSSL下载:/source/index.html (openssl.org)
官网不提供 windows 版本下载。可搜索第三方提供的。此处采用的是 git 自带的(路径:C:\Program Files\Git\mingw64\bin)
(1)生成 RSA
秘钥
1
2
|
#实际使用中看服务器性能,如果足够好也可以使用4096位秘钥
openssl genrsa -out nginx.pem 1024
|
(2)生成证书请求
1
2
|
# 注意,Common Name 应当填写你要部署的域名,或使用*,对所有mydomain.com的子域名做认证
openssl req -new -key nginx.pem -out nginx.csr
|
(3)签发证书
1
|
openssl x509 -req -days 36500 -in nginx.csr -signkey nginx.pem -out nginx.crt
|
(4)配置 nginx
nginx
一般都自带有 ssl
的支持
1
2
3
4
5
6
7
8
9
10
11
12
|
# 在 server 节点添加如下内容
server { ... listen 443 ssl;
server_name test.mydomain.com; #与申请时的域名保持一致,否则会报错
ssl_certificate "/etc/nginx/ssl/nginx.crt"; #
ssl_certificate_key "/etc/nginx/ssl/nginx.pem";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
...}
|
(5)重新载入 nginx
跨域配置
- 配置在 server 节点下,该端口的 url 跨域访问均放行;
- 配置在 location 节点下,该前缀的 url 跨域访问均放行;
1
2
3
4
5
6
7
8
9
10
11
12
|
add_header 'Access-Control-Allow-Origin' *;
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS,PUT';
add_header 'Access-Control-Allow-Headers' *;
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
if ($request_method = 'OPTIONS') {
add_header 'Access-Control-Max-Age' 1728000;
add_header 'Content-Type' 'text/plain; charset=utf-8';
add_header 'Content-Length' 0;
# 对于Options方式的请求返回204,表示接受跨域请求
return 204;
}
|
Preview: