我有一个 NGINX 反向代理,配置为根据请求 URL 转发到同一台机器上的不同端口。我有service1
端口 8070 和service2
端口 8071。这是我的 nginx 配置
upstream service1 {
server 127.0.0.1:8070;
}
upstream service2 {
server 127.0.0.1:8071;
}
server {
server_name a.example.com;
location /foo/ {
proxy_pass http://service1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /bar/ {
proxy_pass http://service2;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
listen 80; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/a.example.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/a.example.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
我需要为 certbot(lets encrypt)启用端口 80 才能部署证书。我正在使用python3-certbot-nginx
插件
此配置目前的问题是客户端可以通过代理对我的服务发出 http(未加密)请求。
有什么方法可以禁用重定向 http 请求并使规则location
仅匹配 https 请求,以便 http 请求不会被重定向,但 http 仍然可用于 certbot 挑战?如果没有,还有其他方法可以让 nginx 不允许 http 请求/强制 https 而不会破坏 certbot 吗?
答案1
创建一个单独的仅 HTTPS 服务器server
,并将代理声明放在该服务器中。