博客和更新地址:配置Nginx反向代理、HTTPS和认证
前言
由于经常用到Nginx反向代理配置,手敲代码麻烦,所以记录一下。
创建密码文件
创建Nginx认证密码文件
mkdir /etc/nginx/conf.d/auth && cd /etc/nginx/conf.d/auth
printf "<username>:$(openssl passwd -crypt <password>)\n" >> passwd
其中<username>
为用户名,<password>
为密码,密码长度最多8个字符
配置SSl证书
创建证书目录
mkdir /etc/nginx/cert
cd /etc/nginx/cert
将证书和密钥上传至该路径下
Nginx配置
编辑站点配置文件
cd /etc/nginx/conf.d
vim <domain>.conf
内容为
# 配置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"配置只需要一次。
保存文件后重新加载配置
systemctl reload nginx
最后测试网站是否正常。