我对网络服务器问题非常陌生,现在试图找到一个工作配置几周,所以任何评论都非常感谢!
我有一台运行cPanel的CentOS机器(端口8080和8443上的EasyApache)和端口80和443上的Nginx。最后,我在端口8002上运行了一个Node js应用程序。
我的节点应用程序与Joomla网站主页集成,所以我真的需要它在不同的端口运行(不确定,如果8002是最好的选择)。
一切都工作得很好,直到我安装SSL Let的加密证书,我使用cPanel Let's Encrypt for cPanel。
我还读到标准是将已经加密的流量传递给Node js并让Ngnix处理https。所以,我的Nodejs应用程序正在期待http流量。
使用我当前的Ngnix配置,如果我使用https:// Joomla网站访问它将工作正常,但我的应用程序将破坏xhr轮询错误。
我可以从控制台看到它试图通过https访问socket.io,这将无法正常工作:
union
访问https://xxx.xx.xxx.xx:8002会让我“安全连接失败”。
如何在这种情况下配置Ngnix正确使用我的应用程序?
在阻止端口80的 default.conf 之后添加当前配置:
Request URL:https://xxx.xx.xxx.xx:8002/socket.io/?userid=0&EIO=3&transport=polling&t=M086vNB
答案 0 :(得分:0)
我认为您使用了错误的反向代理语法。你必须告诉它@服务器或wsgi实例,或者它认为它是一个目录。这是我的设置,将其推断给你。
location / {
try_files $uri @proxy_to_app;
}
location @proxy_to_app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app_server;
}
upstream app_server {
server unix:/opt/workTracker/run/gunicorn.sock fail_timeout=0;
}
我想到的另一件事是默认启用端到端加密的设置。这也称为上游ssL,如果您通过http提供内容,则需要将其关闭。基于此serverFault帖子https://serverfault.com/questions/583374/configure-nginx-as-reverse-proxy-with-upstream-ssl,我会说您可能需要添加以下内容:
proxy_ssl_session_reuse on;
。最初的帖子来自一个试图反而做的人,重新加密到后端服务器,这正是你现在正在做的事情。有些人喜欢这种设置,需要更长的时间(延迟),但优点是数据包在内部网络上保持安全。