Nginx反向代理适用于HTTPS,但不适用于HTTP

时间:2018-12-12 14:21:39

标签: nginx

我对nginx并不陌生,并尝试将其用作我的apache / php应用程序的反向代理,该应用程序位于IP为10.0.1.4的内部负载均衡器后面 我正在尝试将来自NGINX反向代理的流量重定向到内部负载平衡器的IP。

当我在proxy.conf中使用HTTPS配置时,可以正常使用浏览器中的自签名证书错误。

但是当我使用非SSL版本的proxy.conf并尝试在端口80上访问nginx反向代理时,它不会重定向到我的应用程序URL。

以下是我的文件的内容。如果可以,请你帮助我。在这里发布问题之前,我花了很多时间。我无法使其正常工作。

我的环境:Azure上的Red Hat Enterprise Linux Server 7.6(Maipo) Nginx版本:Nginx / 1.15.5 Nginx.Service:活动且正在运行

-----------------------------------------------------------------------------
NGINX.CONF 
-----------------------------------------------------------------------------

[root@webserver1 nginx]# vim nginx.conf 
user nginx; 
worker_processes 1; 

error_log /var/log/nginx/error.log warn; 
pid /var/run/nginx.pid; 


events { 
worker_connections 1024; 
} 


http { 
include /etc/nginx/mime.types; 
default_type application/octet-stream; 

log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
'$status $body_bytes_sent "$http_referer" ' 
'"$http_user_agent" "$http_x_forwarded_for"'; 

access_log /var/log/nginx/access.log main; 

sendfile on; 
#tcp_nopush on; 

keepalive_timeout 65; 

#gzip on; 

include /etc/nginx/conf.d/*.conf; 

正在使用HTTPS PROXY.CONF-这项工作

:[root@webserver1 nginx]# cd conf.d/ 
[root@webserver1 conf.d]# vim proxy.conf 

server { 
listen webserver1:443; 


ssl on; 
ssl_certificate /etc/nginx/ssl/proxy.pem; 
ssl_certificate_key /etc/nginx/ssl/proxy.key; 

ssl_session_cache shared:SSL:1m; 
ssl_session_timeout 2m; 

location / { 
proxy_pass http://10.0.1.4:80; 
proxy_set_header Host $host; 
proxy_redirect off; 
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.CONF进行HTTP访问

server { 
listen 80 default_server; 
location / { 
proxy_pass http://10.0.1.4:80; 
} 
} 

工作正常时,我会打以下URL:https://webserver1https://10.0.1.5

我正在尝试使URL http://webserver1http://10.0.1.5正常工作。

感谢您的帮助。

谢谢

1 个答案:

答案 0 :(得分:0)

您不需要两个server块。将此与仅一个服务器块结合:

server {
    listen 443 ssl;
    listen 80 default_server;
    ssl_certificate /etc/nginx/ssl/proxy.pem;
    ssl_certificate_key /etc/nginx/ssl/proxy.key;
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout 2m;

    location / {
        proxy_pass http://10.0.1.4:80;
        proxy_set_header Host $host;
        proxy_redirect off;
        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;
    }
}

我希望如果此配置适用于HTTPS,那么它也适用于HTTP。