我正在尝试使用Nginx设置反向代理,它还将为后端服务提供https。
我有3个容器,一个用于mongodb,一个用于我的.NET核心后端应用程序,另一个用于反向代理。
Docker容器似乎运行良好,直到我设置了HTTPS才能正常运行。
问题是来自https://localhost:8080的请求未正确转换为在http端口上运行的.NET核心应用程序。
问题出在我的Nginx配置文件中,但我不确定如何修复它。
worker_processes 1;
events { worker_connections 1024; }
http {
sendfile on;
upstream web {
server web:443;
}
server {
listen 8080;
location /upstream {
proxy_pass https://web;
proxy_ssl_certificate /etc/nginx/cert.pem;
proxy_ssl_certificate_key /etc/nginx/privkey.pem;
proxy_ssl_session_reuse on;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
}
server {
listen 443 ssl;
ssl_certificate_key /etc/nginx/privkey.pem;
ssl_client_certificate /etc/nginx/cert.pem;
ssl_verify_client off;
location / {
proxy_pass http://web;
}
}
}
当我执行HTTP请求时,生病了回到502 Bad gateway错误,当使用https://localhost:8080时,它将返回ERR_SSL_PROTOCOL_ERROR。
在终端中,nginx容器返回
有什么想法吗?
答案 0 :(得分:2)
在阅读了一些文档后,我已经找到了解决方案。
worker_processes 1;
events { worker_connections 1024; }
http {
sendfile on;
upstream web {
server web:80;
}
server {
listen 8080 ssl;
ssl_certificate /etc/nginx/cert.pem;
ssl_certificate_key /etc/nginx/privkey.pem;
location / {
proxy_pass http://web;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-NginX-Proxy true;
}
}
}