首页 > 解决方案 > 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 任何帮助将不胜感激。

标签: nginxreverse-proxyredmine

解决方案


发生这种情况是因为您需要设置正确的 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; 
  }                                                                           
} 

推荐阅读