nginx子域重定向捕获其他子域

时间:2013-12-25 00:33:14

标签: nginx

我目前正在通过nginx在子域上运行应用程序并需要SSL。我实施了重定向,强制所有http流量到该子域上的https。我注意到http://www.mydomain.com被重定向到https://app.mydomain.com。但是,访问http://mydomain.com可以正常工作。

我的目标是让http://www.mydomain.com重定向到http://mydomain.com

继续将所有http重定向到http://app.mydomain.com的https流量。

我当前的nginx配置如下所示。

server {
  listen   80; ## listen for ipv4
  server_name  www.mydomain.com;
  return 301 http://mydomain.com$request_uri;
}

server {
  listen   80; ## listen for ipv4
  server_name mydomain.com;
  access_log  off;
  location / {
    root   /usr/share/nginx/html/mydomain;
    index  index.html index.htm;
}

我对应用程序的配置如下:

server {
    listen *:80;
    server_name app.mydomain.com;
    server_tokens off;
    root /nowhere; # this doesn't have to be a valid path since we are redirecting, you don't have to change it.
    return 301 https://app.mydomain.com$request_uri;
}

server {
    listen 443 ssl;
    server_name app.mydomain.com;
    server_tokens off;
    ...
}

2 个答案:

答案 0 :(得分:1)

如果app服务器出于某种原因更好地匹配,那么listen服务器将优先考虑的唯一原因是,我看到的唯一区别是*:80行,将其从80更改为{{1与其他人匹配,告诉我这是否有效。 同样删除root,就像你说的那样毫无意义,不要忘记重新启动/重新加载服务。

编辑:根据你使用firefox,firefox缓存响应,所以如果我将server1设置为重定向到server2并且我从firefox访问server1,firefox会保存该重定向,下次它会没有访问server1重定向,解决你需要清除firefox缓存,如果你知道你今天的第一次访问,例如,你只能清除今天的缓存,我通过试验了解到这一点

答案 1 :(得分:0)

不幸的是,看起来这个问题在完全不同的层面得到了解决。我遇到了一些DNS缓存问题,一旦解决了我的问题就解决了。