Mobile nginx 301从www到移动站点导致404

Mobile nginx 301从www到移动站点导致404,mobile,nginx,rewrite,Mobile,Nginx,Rewrite,我的移动站点的根目录是404。我的浏览器检测代码查找移动用户aget,设置vary头,并将301s发送到移动站点 这里是主站点配置 server { listen 80; server_name www.mydomain.com; location / { if ( $is_mobile) { add_header Vary "User-Agent"; return 301 $scheme://m.mydomain.com$request_uri;

我的移动站点的根目录是404。我的浏览器检测代码查找移动用户aget,设置vary头,并将301s发送到移动站点

这里是主站点配置

server {
  listen 80;
  server_name www.mydomain.com;
  location / {
    if ( $is_mobile) {
      add_header Vary "User-Agent";
      return 301 $scheme://m.mydomain.com$request_uri;  
    }
}
server {
  listen 80;
  server_name m.mydomain.com;
  root /var/www/mobile;
  index index.html;

  location / {
    try_files $uri $uri/ @dynamic;
  }

  location @dynamic {
    rewrite ^/(.*)$ /index.html last;
   }      
}
这是移动站点配置

server {
  listen 80;
  server_name www.mydomain.com;
  location / {
    if ( $is_mobile) {
      add_header Vary "User-Agent";
      return 301 $scheme://m.mydomain.com$request_uri;  
    }
}
server {
  listen 80;
  server_name m.mydomain.com;
  root /var/www/mobile;
  index index.html;

  location / {
    try_files $uri $uri/ @dynamic;
  }

  location @dynamic {
    rewrite ^/(.*)$ /index.html last;
   }      
}
我正在使用FireFox覆盖用户代理扩展进行测试。如果我访问www.mydomain.com,应用程序将正确加载。但是,当我切换到移动浏览器Nginx 404s时

Nginx 200s用于手动输入的页面-

http://m.mydomain.com/index.html
http://m.mydomain.com/about.html
http://m.mydomain.com/pricing.html
既然索引和根都已设置,那么站点不应该指向

如果不是,那么让这项工作正常进行的最佳标准化方法是什么

更新:添加了移动检测的配置

map $http_user_agent $is_desktop {
default 0;
        ~*linux.*android|windows\s+(?:ce|phone) 0; # exceptions to the rule
        ~*spider|crawl|slurp|bot 1; # bots
        ~*windows|linux|os\s+x\s*[\d\._]+|solaris|bsd 1; # OSes
}


map $is_desktop $is_mobile {
        1 0;
        0 1;
}
以下是我在主nginx.conf文件中用于移动检测的配置

map $http_user_agent $is_desktop {
default 0;
        ~*linux.*android|windows\s+(?:ce|phone) 0; # exceptions to the rule
        ~*spider|crawl|slurp|bot 1; # bots
        ~*windows|linux|os\s+x\s*[\d\._]+|solaris|bsd 1; # OSes
}


map $is_desktop $is_mobile {
        1 0;
        0 1;
}

我看没什么错。我在我的devbox中尝试了你的配置文件,它成功了:请求被重定向到m.mydomain.com,index.html被提供


所以可能是其他原因导致了这个问题。您是如何设置$is_mobile的?也许设置$is_mobile有一些副作用,如果nginx没有选择问题中的块来服务移动请求。您的移动请求进入了另一个不知道如何处理的位置块。

在可用的站点中,有一个名为1的文件被符号链接到站点启用。不确定它是如何到达那里的,但我取消了链接并删除了它,重新启动了Nginx,并且/现在正确地解析为index.html。非常奇怪。

发布如何设置$is\u mobile,我来看看该文件的内容是什么?它的服务器块可能与您的www.mydomain.com服务器块冲突,nginx可能永远不会使用您在此处列出的服务器块。奇怪的是,它是我的网站文件的早期版本,使用了不同的浏览器检测逻辑。另外,我在重新加载Nginx时忽略了重复的主机名消息。在Android上,这导致了浏览器中的无限循环:(