利用nginx反向代理功能将http网站改造成https

Posted ID404

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用nginx反向代理功能将http网站改造成https相关的知识,希望对你有一定的参考价值。

内网服务器10.0.0.4使用web应用是http,由于各种原因无法在10.0.0.4上将http升级至https

此时可以在另一台服务器10.0.0.3上部署nginx ,利用nginx的反向代理功能,将访问10.0.0.3的流量转发至10.0.0.4 同时将访问80端口的流量自动跳转至443

当然也可以在10.0.0.4这台服务器上部署nginx,但nginx监听的端口不能和原来的应用一样,需要换一个端口

 

nginx配置如下

worker_processes  1;

events 
    worker_connections  1024;


http 
    server 
        listen 80;
        server_name example.com www.example.com;
        return 301 https://$host$request_uri;
    
    server 
        listen       443 ssl;

        server_name  example.com www.example.com;

        ssl_certificate /etc/nginx/ssl/www.webside.cer;
        ssl_certificate_key /etc/nginx/ssl/www.website.key;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers \'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA\';
        ssl_prefer_server_ciphers on;


        location / 
            proxy_pass http://10.0.0.4;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            #root   /usr/share/nginx/html;
            #index  index.html index.htm;
        
    

 

升级 HTTP 至 HTTPS:使用 Nginx 反向代理

序言



不论是 Google 还是苹果公司,一直都在大力推动 HTTPS 以代替原有的 HTTP 协议,同时不久前据悉美国最大的成人网站也全面的将通信协议升级成了 HTTPS,不可否认的是 HTTPS 将为我们带来一个更加安全的网络环境,而作为开发者也应该直面技术发展的浪潮,毕竟顺风而行,才能飞得更远。


对于许多已经成型并在使用中的后台程序来说,将 HTTP 升级为 HTTPS 似乎是一件很麻烦的事情(说不定你要升级的程序是历史遗留下来的,而修改这种程序对所有程序员来说都是一件很不乐意的事情),所以这里介绍另一种方式来达到目的——即不修改原有后台程序,而使用 Nginx 反向代理服务器的方式。


Nginx



Nginx 本身就是一个强大的服务器,其使用广泛、配置简单,可实现负载均衡、支持高并发、及反向代理等等功能。


示例



环境的搭建不再赘述。


1、我们先准备一个 http 服务器:

node.js 的第一个 hello world , 简单吧。


2、准备 https 相关证书文件:


商用的证书需要花钱向权威的第三方机构购买,这里演示就用 openssl 自签名生成好了。( openssl 会跟随 node 的环境一起搭建,无需另外下载配置)


按下图所示步骤进行:

升级 HTTP 至 HTTPS:使用 Nginx 反向代理


mykey.pem 文件和 mycert.pem 文件将会后续使用。


3、配置 Nginx 的 https 反向代理:




4、测试:


首先启动第 1 步中准备的 http 服务器,(然后如第 3 步中所述修改本地 host 文件),接着通过以下命令启动 nginx 服务器:


最后通过浏览器访问 www.rife-nginx.com 域名,这里会提示证书不安全,因为是我们自己生成的,没有通过第三方权威机构认证,点击继续访问即可看到 hello world 展现于我们眼前。


结束语



本文通过代理服务器的方式变向实现了 https 协议的使用,nginx 非常好用且配置简单,值得尝试,而除了使用 nginx 作为代理服务器外,我们当然可以自己用 node.js 来实现一个代理服务器,当然这次就不展开了,就写这么多吧。 

以上是关于利用nginx反向代理功能将http网站改造成https的主要内容,如果未能解决你的问题,请参考以下文章

如何编写一个 HTTP 反向代理服务器

nginx的四个基本功能

升级 HTTP 至 HTTPS:使用 Nginx 反向代理

nginx的基本功能

重识Nginx - 11 使用ngx_http_proxy_module的proxy_cache搭建一个具备缓存功能的反向代理服务

nginx反向代理实现资源的动静分离