一、问题描述
最近网页数据经常显示不出来,需要二次刷新才行,打开谷歌浏览器控制台查看api请求,发现请求有时会出现没返回Response反而返回一段html代码,具体情况如下图所示
image由于返回的是html代码不是Response,因此页面无法从返回结果中获取数据进行渲染,从而导致页面没有数据,需要刷新才行。
二、问题解决
返回的html代码为如下内容:
<html>
<head>
<script language="javascript">setTimeout("location.replace(location.href.split(\"#\")[0])",2000);</script>
<script type="text/javascript" src="http://1.1.1.3:89/cookie/flash.js"></script>
<script language="javascript">setURL("1.1.1.3");supFlash("734212394");</script>
</head>
<body>
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="0" height="0" id="m" align="center"><param name="allowScriptAccess" value="always" />
<param name="movie" value="http://1.1.1.3:89/cookie/flashcookie.swf" />
<param name="quality" value="high" />
<param name="FlashVars" value="srv=1.1.1.3" />
<embed src="http://1.1.1.3:89/cookie/flashcookie.swf"FlashVars="srv=1.1.1.3" quality="high" width="0" height="0" name="m" align="center" allowScriptAccess="always" type="application/x-shockwave-flash"pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
</body></html>
网上查询相关资料之后,发现是因为之前的接口请求都是走的http,由于http没有任何加密因此很容易遭到劫持,而上面的html代码就是请求被劫持后返回的情况,如果要避免上面的情况,就必须用SSL给请求加密,即走https
三、Nginx配置SSL
在配置SSL前,必须确保Nginx安装了SSL模块
1、openssl
在nginx安装目录/usr/local/nginx创建一个ssl文件夹,然后进入ssl目录下执行创建证书命令
openssl req -x509 -nodes -days 36500 -newkey rsa:2048 -keyout /usr/local/nginx/ssl/nginx.key -out /usr/local/nginx/ssl/nginx.crt
会在ssl生产两个证书,nginx.crt就是公钥,nginx.key就是私钥
image2、修改Nginx配置
nginx配置修改如下
server {
listen 443 ssl;
server_name 999.999.999.999;
ssl_certificate /usr/local/nginx/ssl/nginx.crt;
ssl_certificate_key /usr/local/nginx/ssl/nginx.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root /home/django/project_test/db/dist;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
location /api/ {
proxy_set_header Host $host;#保留代理之前的host
proxy_set_header X-Real-IP $remote_addr;#保留代理之前的真实客户端ip
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header HTTP_X_FORWARDED_FOR $remote_addr;#在多级代理的情况下,记录每次代理之前的客户端真实ip
proxy_pass http://127.0.0.1:9200/;
}
}
修改完配置后,reload一下
service nginx reload
之后就可以走https进行访问了
网友评论