我在 nginx 反向代理后面有两台服务器。我被正确转发到网站,但其中一个网站在允许您进入之前需要登录(类似于 sharepoint),反向代理似乎正在破坏登录。
我之前问过一个环境非常相似的问题这里
我被重定向到登录页面,但我无法登录。但是,如果我从方程式中删除反向代理,那么我就可以正常登录。
登录的服务器名称是服务器2.mydomain.com
/etc/nginx/站点可用/默认
server {
listen 80 default;
server_name _;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl default_server;
server_name server1.mydomain.com;
ssl_certificate /usr/local/nginx/conf/mydomain.com.crt;
ssl_certificate_key /usr/local/nginx/conf/mydomain.com.key;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://192.168.0.15:80;
proxy_set_header Host $host;
proxy_redirect http:// $scheme://;
}
}
server {
listen 443 ssl;
server_name server2.mydomain.com;
ssl_certificate /usr/local/nginx/conf/mydomain.com.crt;
ssl_certificate_key /usr/local/nginx/conf/mydomain.com.key;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://192.168.0.20:80;
proxy_set_header Host $host;
proxy_redirect http:// $scheme://;
}
}
当我去服务器1.mydomain.com基本上是一个静态网站,一切似乎都正常。但是,当我去服务器2.mydomain.com我收到了弹出窗口登录,但无法成功登录服务。
预期的行为是,我能够登录并使用该站点,就好像没有反向代理一样。
这是我尝试登录时来自反向代理的访问日志服务器2.mydomain.com
/var/log/nginx/access.log
192.168.0.5 - - [26/Jan/2016:02:23:52 -0600] "GET /test HTTP/1.1" 401 341 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko"
192.168.0.5 - - [26/Jan/2016:02:23:52 -0600] "GET /test HTTP/1.1" 401 1293 "-" "Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko"
这/测试是登录所在的网站部分,所以我试图访问server2.mydomain.com/test。
有什么事情会明显阻止我登录吗?还有其他日志文件我可以检查吗?提前致谢
编辑1
我尝试了几种方法,但都不起作用。
我的原始配置文件让我登录,但它总是返回拒绝访问的页面。
这个配置文件:
/etc/nginx/站点可用/默认
server {
listen 443 ssl;
server_name server2.mydomain.com;
ssl_certificate /usr/local/nginx/conf/mydomain.com.crt;
ssl_certificate_key /usr/local/nginx/conf/mydomain.com.key;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://192.168.0.20:80;
}
}
使用 proxy_set_header 行和 proxy_redirect 只会将我带到直接 403 禁止访问页面,但正在重定向。
如果我proxy_set_header
重新添加该行,我会再次登录,但任何登录仍然会失败。我还尝试将 proxy_set_header 更改为proxy_set_header X-Forwarded-Proto $scheme
,但这又完全破坏了它。有什么想法吗?
答案1
您的代理重定向看起来可疑。请查看文档,以及nginx 初学者指南。
基本上,尝试从您的位置删除除 proxy_pass 之外的所有内容。这主要是猜测,但值得一试。
答案2
不久前我遇到过类似的问题,我通过修复启动该进程的组的文件夹访问权限解决了这个问题。
NGINX 配置为使用哪个用户?该用户是否有权访问这些 SSL 文件夹位置?
參考文獻:如何更改 NGINX 用户?