将 NGINX 反向代理限制为仅 https

将 NGINX 反向代理限制为仅 https

我有一个 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,并将代理声明放在该服务器中。

相关内容