前言

由于经常用到Nginx反向代理配置,手敲代码麻烦,所以记录一下。

创建密码文件

创建Nginx认证密码文件

1
mkdir /etc/nginx/conf.d/auth && cd /etc/nginx/conf.d/auth
1
printf "<username>:$(openssl passwd -crypt <password>)\n" >> passwd

其中<username>为用户名,<password>为密码,密码长度最多8个字符

配置SSl证书

创建证书目录

1
mkdir /etc/nginx/cert
1
cd /etc/nginx/cert

将证书和密钥上传至该路径下

Nginx配置

编辑站点配置文件

1
cd /etc/nginx/conf.d
1
vim <domain>.conf

内容为

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
# 配置proxy_cache_path模块缓存数据
proxy_cache_path /tmp levels=1:2 keys_zone=cache:10m max_size=100m inactive=60m use_temp_path=off;

server {
listen 80;
server_name <domain>;
# 重写为https
location / {
rewrite ^(.*)$ https://<domain>$1 permanent;
}
}

server {
listen 443 ssl;
server_name <domain>;

# Nginx认证
auth_basic "Authentication"; # 有提示时显示的网站名
auth_basic_user_file conf.d/auth/passwd; # 密码文件路径

# ssl证书地址
ssl_certificate /etc/nginx/cert/<domain>.pem; # 证书文件的路径
ssl_certificate_key /etc/nginx/cert/<domain>.key; # 密钥文件的路径

# ssl验证相关配置
ssl_session_timeout 5m; # 缓存有效期
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #加密算法
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # 安全链接可选的加密协议
ssl_prefer_server_ciphers on; # 使用服务器端的首选算法

# 反向代理配置
location / {
proxy_redirect off; # 关闭重定向
proxy_cache cache; # 设置代理缓存
proxy_cache_valid 200 304 12h;
proxy_cache_valid any 10m;
proxy_cookie_domain <proxy_domain> <domain>;
proxy_pass https://<proxy_domain>; # 代理的地址
proxy_connect_timeout 20s;
proxy_read_timeout 600s;
proxy_send_timeout 600s;

# 设置请求体头部
proxy_set_header Host "<proxy_domain>";
proxy_set_header User-Agent $http_user_agent;
proxy_set_header Referer https://<proxy_domain>;
proxy_set_header Accept-Encoding "";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header Accept-Language "zh-CN";
proxy_set_header Cookie "PREF=ID=047808f19f6de346:U=0f62f33dd8549d11:FF=2:LD=zh-CN:NW=1:TM=1325338577:LM=1332142444:GM=1:SG=2:S=rE0SyJh2W1IQ-Maw";
sub_filter https://<proxy_domain> https://<domain>; #字符串替换
sub_filter_once off;
addition_types *;
}
}

其中的<proxy_domain>为要代理的地址,<domain>为自己的地址,有多个站点时”proxy_cache_path”配置只需要一次。

保存文件后重新加载配置

1
systemctl reload nginx

最后测试网站是否正常。