使用Nginx反向代理的一些小记...

Posted 迪亚波罗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Nginx反向代理的一些小记...相关的知识,希望对你有一定的参考价值。

先来讲一下配置:

服务器 单核2G(*1);

nginx1.12.0;

    对的,就是辣么简单,就是辣么任性,有时候我们总把事情想的太复杂,那是因为你都没有去做过,便妄下断言。而当你真正去做了之后才知道事情远没有我们想象的复杂......当然没有Nginx的强大想完成我们的目标也不是不行,但别忘了还有学习成本,确实我们有大量的时间,但是却没有时间可供我们去挥霍,把拥有的时间用在“正事”上,这听起来没毛病。

    正如人生,我们总是在不对的尝试,在感觉是一条对的道路上愈走愈远,直至交叉路口。

    话不多说,马上进入主题。一开始我通过Nginx.org找到Nginx的upstream模块配置方法,准确的说这是Nginx Load Balancing(负载均衡),接下来我就二话不说开干了,在访问域名显示的目标服务器上的Nginx欢迎信息时我是比较欢喜的,我在心里想着:第一次就Success了,太Cool了。但是总感觉哪里不对劲,对啊,我是要代理网站的内容呈现啊,你给我Nginx Server的欢迎界面干么,和你很熟啊?

    继续改进,这次我用到了群面向编程,向大神请教,他一看我的Nginx前端配置就问我:你要Load Balancing吗?我说不啊,我只要代理这一个Features。他说那你按我的来,嗖嗖的给我发来一段配置,如下:

    servver {

        listen 80; 

        server_name $host; 

        location / { 

            proxy_pass http://xxx.com/; 

            proxy_set_header Host $host; 

            proxy_redirect off; 

            proxy_set_header X-Real-IP $remote_addr; 

            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 

            proxy_connect_timeout 60; 

            proxy_read_timeout 600; 

            proxy_send_timeout 600; 

    }

    我一看,得,这是根本不需要用Upstream模块啊,看来我是老孔雀开屏——自作多情。修改了我的配置后继续进行访问域名测试,咦,怎么还是Nginx的欢迎界面,我TM真和你不是很熟......仔细想想,时间如白驹过隙,眨眼30min过去了,才想到我代理的只是AWS给我的CNAME,但是目标服务器(美东)上并没有什么写具体的接受我代理的Nginx配置啊,那就写上呗,目标服务器上Listen 80 Port,server_name修改为测试域名。

    再测试,O了,可以正常访问了。我的心里长长的出了一口气,终于......

    是日,客户突然Call过来,说我的网站怎么无法访问了,一访问就跳到你们的官网了,当时我就想到是昨晚做反向代理时没有配置SSL证书,所以解析过去的域名不能正确的访问到客户网站的内容。我想这不行啊,虽然网站还没正式上线,但总得让客户随时都可以访问的状态吧,那我就信誓旦旦的说,明天准好。确实有了底气就是不一样,神清气爽的。

    晚上回来接着研究,在网上找到了以下解决方案,即最终解决方案,话不多说,上Code:

    server {

        listen 80;

        server_name dayal-timber.com www.dayal-timber.com;


        if ( $scheme = http ) {

    return 301 https://www.dayal-timber.com$request_uri;

        }

    }


    server {

        listen 443;

        server_name dayal-timber.com www.dayal-timber.com;


        access_log      logs/ssl-access.log;

        error_log       logs/ssl-error.log;


        ssl on;

        ssl_certificate         /usr/local/nginx/ssl/dayal-timber/214176381230424.pem;

        ssl_certificate_key     /usr/local/nginx/ssl/dayal-timber/214176381230424.key;

        ssl_session_timeout 5m;

        ssl_protocols SSLv2 SSLv3 TLSv1;

        ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;

        ssl_prefer_server_ciphers on;    


        location / {

    proxy_pass https://CNAME;

    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;

    proxy_connect_timeout 60; 

      proxy_read_timeout 600; 

    proxy_send_timeout 600;


        }

    }

    再测试访问,OK,Perfect。不过事情还没有结束,明天接着测试使用Hong Kong服务器代理看看效果。正所谓人生总需尝试,不尝试就妄下结论,那不是睿智,最起码在我看来是二逼。

    总结一下:Reverse Proxy这条路是对的,就看怎么走,在老铁看来是没毛病的。今天看了V社的一个帖子,说他们公司的测试太NB了,一段功能测试出57个BUG,下面评论说哥们你遇上贵人了......

    我想真是贵人相助了......

    

以上是关于使用Nginx反向代理的一些小记...的主要内容,如果未能解决你的问题,请参考以下文章

SSH 正向/反向代理小记

Nginx转发+反向代理实现跨域接口转发

nginx正向代理和反向代理区别和好处

nginx作为正向代理,反向代理的一些应用

使用nginx反向代理tomcat集群

nginx 反向代理 websockets