一起IE疑难杂症引起的NGIN血案
2019-04-22 17:42:00
事情的起因是客户需要部署SSL证书,并且只能使用指定域名访问。Soeasy!
安装openssl====>编译nginx=====>配置nginx
配置文件如下
server {
listen8443 ssl;
server_namewww.xxxxx.com.cn;
proxy_redirecthttp:// https://;
ssl_certificate /usr/local/nginx/conf/ssl.crt;
ssl_certificate_key/usr/local/nginx/conf/ssl.key;
ssl_session_timeout5m;
ssl_ciphersECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocolsTLSv1.2;
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
ssl_prefer_server_cipherson;
location/ {
proxy_passhttp://x.x.x.x:8000;
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen8443 ssl default_server;
server_name_;
ssl_certificate /usr/local/nginx/conf/ssl.crt;
ssl_certificate_key/usr/local/nginx/conf/ssl.key;
return403;
}
}
其实就这个配置也遇到了几个问题
第一个问题:
Https://www.xxxxx.com.cn:8443 登录之后会自动跳转到Http://www.xxxxx.com.cn:8000
网上收集了3种跳转方法
rewrite ^(.*) h t t p s : / / https:// https://host:8443$1 permanent;
return 301 http:// h o s t ] ( h t t p : / / host](http:// host](http://host:8443 r e q u e s t u r i ; ) [ : 8443 ] ( h t t p : / / request_uri;)[:8443](http:// requesturi;)[:8443](http://host:8443 r e q u e s t u r i ; ) [ request_uri;)[ requesturi;)[request_uri;
proxy_redirect http:// https://;
请注意: p r o x y _ h o s t | proxy\_host| proxy_host|host|$http_host的区别
三种方法都不成功,判断哪里的配置有冲突,配置到第三种方法的时候,下面的的这条配置引起了注意
注释掉这条配置信息之后,正常。
proxy_redirect off;
第二个问题 只运行指定的域名访问,因为是ssl 所以配置访问限制的时候,也需要带上SSL证书。
server {
listen8443 ssl default_server;
server_name_;
ssl_certificate /usr/local/nginx/conf/ssl.crt;
ssl_certificate_key/usr/local/nginx/conf/ssl.key;
return403;
}
狗血的剧情来了…
这个时候客户要求 同时提供http和https访问端口分别为8000 和8443 ,然后8000强制跳转到8443
按道理来说也是非常简单的。
最简单的配置如下
server {
listen 8000;
listen8443 ssl;
server_namewww.xxxxx.com.cn;
proxy_redirect http:// https://;
error_page 497 https:// h o s t : 8443 host:8443 host:8443uri?$args;
ssl_certificate /usr/local/nginx/conf/ssl.crt;
ssl_certificate_key/usr/local/nginx/conf/ssl.key;
ssl_session_timeout5m;
ssl_ciphersECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocolsTLSv1.2;
ssl_prefer_server_cipherson;
location/ {
proxy_passhttp://x.x.x.x:8000;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen8443 ssl default_server;
server_name_;
ssl_certificate /usr/local/nginx/conf/ssl.crt;
ssl_certificate_key/usr/local/nginx/conf/ssl.key;
return403;
}
}
然后发现部分浏览器正常,部分不正常。 放弃最简单的方式,改用正常的虚拟主机方式
保持原有配置不变,新增如下配置
server {
listen8000;
server_namewww.xxxxx.com.cn;
return 301 http:// h o s t ] ( h t t p : / / host](http:// host](http://host:8443 r e q u e s t u r i ; ) [ : 8443 ] ( h t t p : / / request_uri;)[:8443](http:// requesturi;)[:8443](http://host:8443 r e q u e s t u r i ; ) [ request_uri;)[ requesturi;)[request_uri;
location/ {
proxy_passhttp://x.x.x.x:8000;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For$proxy_add_x_forwarded_for;
}
还是部分浏览器正常,部分不正常。当我把nginx的配置删了又改,改了又删还是不对,于是怀疑是客户端的浏览器有问题,于是叫客户给我开了两台客户端,分别对比
1、chrome 两台客户端都正常
2、firefox 两台都正在
3、360浏览器 一台正常,一台不正常,对比发现正常的使用的是IE兼容模式,不正常的是使用的极速模式改过来就正常了
狗血的IE浏览器疑难杂症出现了,一台正常,一台怎么都无法跳转访问Http://www.xxxxx.com.cn:8000
提示INET_E_DOWNLOAD_FAILURE
尝试重置IE浏览器,居然点击重置无效,尝试网上找IE修复工具,一大堆工具,但是不敢用,最尝试卸载IE ,然后重装,这个时候特么的还是不能跳转。
就在失望的时候,准备下载所有工具一一尝试的时候,IE重置又可以用了,重置后重启,IE浏览器恢复正常
评论(0)