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

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

我是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请教下问题,谢谢。

2017-04-20   #2

无限重定向了啊。

2017-04-20   #3

回复#2 @lincanbin :

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

其实是工具生成的。

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访问和手机访问完全不一样的。

2017-04-20   #6

回复#5 @后宫学长 :

blob.png

问题似乎出在这里。

2017-04-20   #7

回复#4 @lincanbin :

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

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

2017-04-20   #8

回复#5 @后宫学长 :

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

2017-04-20   #9

回复#8 @lincanbin :

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

辛苦了。

2017-04-20   #10

回复#9 @后宫学长 :

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

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

2017-04-20   #13

回复#12 @后宫学长 :

建议你也分开两套写。

2017-04-21   #14

回复#13 @lincanbin :

照抄你的写法可以用。

Nginx推荐的写法却不行。

return 301 https://$server_name$request_uri;


2017-04-21   #15

回复#14 @后宫学长 :

2017-04-21   #16

回复#15 @lincanbin :

终于搞定了!

return 301 https://$host$request_uri;

真是日了狗了。

2017-04-21   #17

回复#16 @后宫学长 :

还是多看文档吧。

2017-04-21   #18

回复#17 @lincanbin :

你有苹果设备吗?

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

第三方浏览器正常。

官网都很正常。

求贴下官网Nginx的配置。

你是单Nginx还是Nginx+Apache?

2017-04-21   #19

回复#18 @后宫学长 :

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

登录后方可回帖

登 录
信息栏

Carbon Forum是一个基于话题的高性能轻型PHP论坛

下载地址:Carbon Forum v5.9.0
QQ群:12607708(QQ我不常上)

donate

手机支付宝扫描上方二维码可向本项目捐款

粤公网安备 44030602003677号
粤ICP备17135490号

Loading...