今天要来问下Nginx的配置问题...

今天要来问下Nginx的配置问题...

By 后宫学长 at 2017-04-20
0人收藏 • 6940人看过

我是Nginx+Apache。

现在的问题是:手机版的问题。

PC直接访问PC版http地址,Nginx正常跳转https地址,正常访问。

PC直接访问手机版http地址,Nginx跳转到PC版https地址。

PC直接访问手机版https地址,Nginx正常访问。


但是用手机浏览器(安卓UA)却无法访问。

具体表现为URL一直在http和https中重复301,然后提示无法访问。


有时候也会正常返回手机版URL,但是貌似还是存在重复301,依旧无法访问。


有时候直接输入手机版地址可以访问。


请问这是哪里出了问题呢?

今天才发现问题。

Nginx配置了http跳转https。(肯定是这里的锅!)

Apache的.htaccess中的跳转已注释。

server {
  listen 80;
  listen 443 ssl http2;
  ssl_certificate /usr/local/nginx/conf/ssl/tucao.moe.crt;
  ssl_certificate_key /usr/local/nginx/conf/ssl/tucao.moe.key;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
  ssl_prefer_server_ciphers on;
  ssl_session_timeout 10m;
  ssl_session_cache builtin:1000 shared:SSL:10m;
  ssl_buffer_size 1400;
  add_header Strict-Transport-Security max-age=15768000;
  ssl_stapling on;
  ssl_stapling_verify on;
  server_name tucao.moe i.tucao.moe m.tucao.moe;
  access_log /data/wwwlogs/tucao.moe_nginx.log combined;
  index index.html index.htm index.php;
  root /data/wwwroot/tucao.moe;
  if ($ssl_protocol = "") { return 301 https://$server_name$request_uri; }
  
  
  location / {
    try_files $uri @apache;
  }
  location @apache {
    proxy_pass http://127.0.0.1:88;
    include proxy.conf;
  }
  location ~ .*\.(php|php5|cgi|pl)?$ {
    proxy_pass http://127.0.0.1:88;
    include proxy.conf;
  }
  location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
    expires 30d;
    access_log off;
  }
  location ~ .*\.(js|css)?$ {
    expires 7d;
    access_log off;
  }
  location ~ /\.ht {
    deny all;
  }
}
#SSL

	#RewriteCond %{HTTP_HOST} ^tucao.moe$ [NC]
	#RewriteCond %{SERVER_PORT} 80
	#RewriteRule ^(.*)$ https://tucao.moe/$1 [L,R=301]
	#RewriteCond %{HTTP_HOST} ^m.tucao.moe$ [NC]
	#RewriteCond %{SERVER_PORT} 80
	#RewriteRule ^(.*)$ https://m.tucao.moe/$1 [L,R=301]


31 个回复 | 最后更新于 2017-04-24
后宫学长
2017-04-20
#1

@lincanbin :额...dalao请教下问题,谢谢。

lincanbin
2017-04-20
#2

无限重定向了啊。

后宫学长
2017-04-20
#3

回复#2 @lincanbin :

是不是Nginx的跳转规则写得太简单了...

其实是工具生成的。

lincanbin
2017-04-20
#4

访问http的www.xxx.com,触发Nginx的规则,跳转到https的www.xxx.com;

访问https的www.xxx.com,触发CF的规则,跳转到http的m.xxx.com(因为Apache代理PHP、Nginx代理https的原因,没识别出是https);

访问http的m.xxx.com,触发Nginx的规则,跳转到https的m.xxx.com;


这样三次跳转就应该成功了啊,奇怪。

后宫学长
2017-04-20
#5

回复#4 @lincanbin :

地址您帮忙看下:

tucao.moe

m.tucao.moe


PC访问和手机访问完全不一样的。

lincanbin
2017-04-20
#6

回复#5 @后宫学长 :

blob.png

问题似乎出在这里。

后宫学长
2017-04-20
#7

回复#4 @lincanbin :

手机直接访问PC地址都不成功。

苹果手机自带的浏览器直接无响应。

lincanbin
2017-04-20
#8

回复#5 @后宫学长 :

脑壳疼,明天再看,今天上线搞得我没血了。

后宫学长
2017-04-20
#9

回复#8 @lincanbin :

好的,能贴一下你官网的配置吗。

辛苦了。

lincanbin
2017-04-20
#10

回复#9 @后宫学长 :

我不知道官网有没有这个问题。

lincanbin
2017-04-20
#11

回复#9 @后宫学长 :

server {
        listen       80;
        listen [::]:80;
        server_name www.94cb.com 94cb.com m.94cb.com api.94cb.com;
        if ($http_user_agent !~ spider) {
            rewrite ^(.*) https://$host$1 permanent;
        }
}

官网针对80和443分别写了两个Server。

后宫学长
2017-04-20
#12

回复#11 @lincanbin :

其实我也在想应该是这里的锅了。

官网访问正常。

那我试试。


刚刚在V2EX看见个帖子。

https://www.v2ex.com/t/275074

lincanbin
2017-04-20
#13

回复#12 @后宫学长 :

建议你也分开两套写。

后宫学长
2017-04-21
#14

回复#13 @lincanbin :

照抄你的写法可以用。

Nginx推荐的写法却不行。

return 301 https://$server_name$request_uri;


lincanbin
2017-04-21
#15

回复#14 @后宫学长 :

后宫学长
2017-04-21
#16

回复#15 @lincanbin :

终于搞定了!

return 301 https://$host$request_uri;

真是日了狗了。

lincanbin
2017-04-21
#17

回复#16 @后宫学长 :

还是多看文档吧。

后宫学长
2017-04-21
#18

回复#17 @lincanbin :

你有苹果设备吗?

苹果6的Safari浏览器无法连接网站,提示服务器已停止响应。

第三方浏览器正常。

官网都很正常。

求贴下官网Nginx的配置。

你是单Nginx还是Nginx+Apache?

lincanbin
2017-04-21
#19

回复#18 @后宫学长 :

Nginx + Apache,配置就是上面那个啊。


登 录


现在注册

QQ  登 录    Weibo  登 录    GitHub  登 录