后端砖头

Nginx配置SSL证书实现https访问

2021-11-16  本文已影响0人  修行的修行

一、问题描述

最近网页数据经常显示不出来,需要二次刷新才行,打开谷歌浏览器控制台查看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就是私钥

image

2、修改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进行访问了

上一篇下一篇

猜你喜欢

热点阅读