nginx - Nginx 重定向到错误的 url
问题描述
近6个月来,我一直试图弄清楚这一点,我不知所措。我已经阅读了所有关于堆栈溢出的文章,甚至与我的问题远程相关,但没有任何效果。我有一台运行 redmine 和 bookstack 的机器。我在那台机器上有 nginx 并配置为使用 redmine.home.mydomain.com 和 kb.home.mydomain.com,效果很好。当我输入这些时没有问题。
我在键入时遇到的问题尝试从面向外部的 nginx 服务器重定向到该 URL。我有 redmine.mydomain.com 和 kb.mydomain.com。redmine 的效果很好,但 kb 的重定向到 redmine。我不知道为什么。
我已经检查了几个浏览器中的响应标头,它被重定向到https://kb.mydomain.com但该调用的响应是 redmine 主页。即使它应该重定向到 kb.home.mydomain.com 如果我直接输入它也可以正常工作。
书架配置
# redirect to ssl
server {
listen 80;
listen [::]:80;
server_name kb.mydomain.com www.kb.mydomain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name kb.mydomain.com www.kb.mydomain.com;
client_max_body_size 50M;
ssl on;
ssl_certificate /etc/letsencrypt/live/mydomain.com-0001/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mydomain.com-0001/privkey.pem;
access_log /var/log/nginx/kb.access;
error_log /var/log/nginx/kb.error;
location / {
proxy_pass http://kb.home.mydomain.com/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
redmine 配置。
# redirect to ssl
server {
listen 80;
listen [::]:80;
server_name redmine.mydomain.com www.redmine.mydomain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name redmine.mydomain.com www.redmine.mydomain.com;
client_max_body_size 50M;
ssl_certificate /etc/letsencrypt/live/mydomain.com-0001/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mydomain.com-0001/privkey.pem;
location / {
proxy_pass http://redmine.home.mydomain.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
我不知道为什么它会重定向到 redmine 任何帮助将不胜感激。
解决方案
发生这种情况是因为您需要设置正确的 Header HTTP Host 以在您的后端环境中工作,您是如何做错的,您甚至在默认网站内。
server {
listen 80;
listen [::]:80;
server_name kb.mydomain.com www.kb.mydomain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name kb.mydomain.com www.kb.mydomain.com;
client_max_body_size 50M;
ssl on;
ssl_certificate /etc/letsencrypt/live/mydomain.com-0001/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mydomain.com-0001/privkey.pem;
access_log /var/log/nginx/kb.access;
error_log /var/log/nginx/kb.error;
location / {
proxy_pass http://kb.home.mydomain.com/;
proxy_set_header Host kb.home.mydomain.com;
proxy_set_header X-Real-IP $remote_addr;
}
}
redmine 配置。
server {
listen 80;
listen [::]:80;
server_name redmine.mydomain.com www.redmine.mydomain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name redmine.mydomain.com www.redmine.mydomain.com;
client_max_body_size 50M;
ssl_certificate /etc/letsencrypt/live/mydomain.com-0001/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mydomain.com-0001/privkey.pem;
location / {
proxy_pass http://redmine.home.mydomain.com;
proxy_set_header Host redmine.home.mydomain.com;
proxy_set_header X-Real-IP $remote_addr;
}
}
推荐阅读
- database - 如何删除符合特定条件的 MongoDB 数据库?
- javascript - 如何使用 (CSS/HTML/Javascript) 在 Hover 上添加带有动画的字母
- html - 如何确保跨度的内容在 CSS 中向右而不是向左增长
- c# - 无法将证书粘贴到受信任的根证书颁发机构存储中。访问被拒绝
- java - 为什么不能通过两个参数交换数组的两个元素?
- netcdf - NetCDF 重新排序维度
- reactjs - 从 React 中的表单发布方法获取响应
- php - 选择数据时子查询返回多于 1 行
- cmd - cd %C^ 在命令提示符中?
- javascript - 如何使用 Nodejs 和 APIGatewayProxyEvent 发送带有请求的文件