当前位置: 56net亚洲必嬴 > 服务器&运维 > 正文

必嬴56net官网选择Nginx后如何在web应用中得到客商

时间:2019-11-01 16:29来源:服务器&运维
Nginx平淡无奇现象代理转发配置,nginx场景转载 只顾:本文出自 “阿飞”的博客 ,假诺要转发本随笔,请与作者联系!并评释来源:  在此边分享的不是nginx的铺排文件表明,而是nginx常

Nginx平淡无奇现象代理转发配置,nginx场景转载

只顾:本文出自 “阿飞”的博客 ,假诺要转发本随笔,请与作者联系! 并评释来源: 

在此边分享的不是nginx的铺排文件表明,而是nginx常用的转变代理配置(比方线上多域名配置,后端各样转载代理配置以至相比较复杂的代理转载配置),其它还有大概会对常用的转向代理参数配置进行认证。

nginx配置文件证明请仿照效法:

1)

2)

生机勃勃、代理转载

nginx的代理转载主倘若在server部分举行计划。若是转会到制定域名或子域名,则必要在godaddy、Ali云等域名深入解析中先行安排(子)域名并点名IP。本文中主要描述通配符域名的配置,那样更具备通用性。

server部分配置为:

server {
        listen       80;
        server_name  *.yourdomain.com;
......

设倘若https则改善listen部分就可以:

listen       443 ssl;

* https配置还索要单独安顿ssl部分的剧情,证书不等同,配置方式也可能有差别,这里不做牵线。

相仿意况下,大家会有如下何足为奇的三种必要

1)指向到同盟社官方网站或任何产品网(一流域名)
各类域名单独安插二个server就可以,如HTTPS的配置如下:

    server {
        listen          443 ssl;
        server_name     www.yourdomain.com; #修改为需要的一级域名即可

        access_log      logs/ssl.access.log;
        error_log       logs/ssl.error.log crit;

        include ssl_params;

        location / {
                index  index.html index.htm index.php;
                index  proxy_set_header Host $host;
                index  proxy_set_header X-Real-IP $remote_addr;
                index  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_pass http://server_cluster; #后端服务器,具体配置upstream部分即可
        }

    }

2)指向到信用合作社内处系统等等(二级域名)

同1)部分的配置,只需求改正server_name部分就能够:

server_name     二级域名.yourdomain.com; #修改为需要的二级域名即可

3)二级域名下八个服务转向

比如:

...

自此端服务可能会布署在分歧的server容器中,举个例子tomcat、php-fpm/fastcgi、第三方服务...

server部分亟需先计划第2)点有的情节,然后再安插该server下的location转载,习以为常location配置场景如下:

a)转载到后端Tomcat

      location /location名称/ {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://127.0.0.1:8080/服务名/;
      }

tomcat的转折是非常轻便的了,这里无需多说。

b)转发到php-fpm

将具备php页面包车型大巴伸手转给php-fpm处理:

      location ~ .php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+.php)(/.+)$;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
      }

fastcgi_params配置:

fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
#fastcgi_param  SERVER_SOFTWARE    nginx;
fastcgi_param  SERVER_SOFTWARE    nginx;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

注意!

布署不享有通用性,要求依赖自身服务器及实际业务须要张开安顿和调动。

这边的配备仅提供参谋。

d)转载到第三方域名(第三方接口服务)

比如说做开垦时,内部系统须求经过代理转载到银行职员联合会支付接口:

location /unionpay/ {
         proxy_set_header Host gateway.银联.com;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_pass https://gateway.银联.com/;
}

这里的proxy_set_header Host必得配备。

4)强制http转https访问

80端口部分server配置:

server {
        listen  80;
        server_name     api.yourdomain.com;
        location / {
                rewrite ^/(.*) https://api.yourdomain.com/$1 permanent ;
                break;
        }
        error_page 497 https://$host:$server_port$request_uri;
    }

当客户通过HTTP 80拜会时,nginx将挟持转换为HTTPS 443寻访。

443端口部分server配置:

server {
        listen       443 ssl;
        server_name  api.yourdomain.com;

        access_log logs/ssl.api_access.log;
        error_log  logs/ssl.api_error.log crit;

        include ssl_params;

        location / {
                proxy_pass http://tomcat_servers/$2;
                proxy_set_header Host $host:443;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        location /v1.0/ {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://tomcat_servers/v1.0/;
            proxy_cookie_path /v1.0/ /;
            proxy_redirect off;
        }

}

5)后缀名定向

譬喻,有U奥迪Q7L:www.abc.com/register/user.do,须求将U汉兰达L定向为uuu.abc.com/register/user.do。则足以在WWW.ABC.COM节点中那样布置:

location / {
        rewrite ^(/register)/user(.*)..*$  break;

        index  index.html index.htm;
        proxy_set_header Host $host:443;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto  $scheme;
        proxy_pass ;
}

6)在location中经过if-else分支,依据恳求参数使用不一致的proxy_pass进行转载。如:

例如url为:

为此,Nginx中得以对location实行if判别,应用方案如下:

location /test/ {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        if ($arg_n ~* "web01") {
                  proxy_pass ;
                  break;
        }

        if ($arg_n ~* "web02") {
                  proxy_pass ;
                  break;
        }

        .......

}

其中,$arg_n表示url中的n参数,$arg_p表示url中的p参数。

末段,特别要留神的是!proxy_pass 后的url不可能有与央求的url后的门路,如proxy_pass

7)Nginx支持websocket的配置

只供给增多深草绿字体部分公司署即可:

location /drsws/ {
    proxy_set_header Host $host;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";

    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    ........

}

二、参数表达

1)proxy_set_header    X-real-ip $remote_addr;

在web服务器端获得客商的实在ip。

可是,实际上要收获客商的真人真事ip,不是唯有那三个主意,上边我们后续看。

 

2)proxy_set_header           X-Forwarded-For $proxy_add_x_forwarded_for;

咱俩先看看这里有个X-Forwarded-For变量,那是一个squid开拓的,用于识别通过HTTP代理或负载平衡器原始IP四个总是到Web服务器的客商机地址的非rfc规范,就算有做X-Forwarded-For设置的话,每趟经过proxy转载都会有记录,格式便是client1, proxy1, proxy2,以逗号隔开分离各类地点,由于他是非rfc标准,所以默许是未曾的,必要强制增加,在默许情形下通过proxy转载的诉求,在后端看来远程地址都是proxy端的ip 。也正是说在暗中认可情状下大家选用request.getAttribute("X-Forwarded-For")获取不到客商的ip,假使我们想要通过这些变量得到客商的ip,大家要求本身在nginx加多如下配置:

proxy_set_header            X-Forwarded-For$proxy_add_x_forwarded_for;

意思是充实叁个$proxy_add_x_forwarded_for到X-Forwarded-For里去,注意是增添,并不是覆盖,当然由于默许的X-Forwarded-For值是空的,所以大家总感觉到X-Forwarded-For的值就也正是$proxy_add_x_forwarded_for的值,实际被欺诈你搭建两台nginx在差别的ip上,何况都接受了这段配置,那你会发以往web服务器端通过request.getAttribute("X-Forwarded-For")获得的将会是客商端ip和率先台nginx的ip。

那么$proxy_add_x_forwarded_for又是何等?

$proxy_add_x_forwarded_for变量满含客商端央求头中的"X-Forwarded-For",与$remote_addr两有的,他们之间用逗号分开。

比如,有一个web应用,在它前边经过了多少个nginx转载,www.linuxidc.com 即顾客访谈该web通过两台nginx。

在第黄金年代台nginx中,使用

proxy_set_header            X-Forwarded-For$proxy_add_x_forwarded_for;

现在的$proxy_add_x_forwarded_for变量的"X-Forwarded-For"部分是空的,所以唯有$remote_addr,而$remote_addr的值是客商的ip,于是赋值以往,X-Forwarded-For变量的值正是客商的切实地工作的ip地址了。

到了第二台nginx,使用

proxy_set_header            X-Forwarded-For$proxy_add_x_forwarded_for;

现在的$proxy_add_x_forwarded_for变量,X-Forwarded-For部分含有的是客户的实际ip,$remote_addr部分的值是上意气风发台nginx的ip地址,于是通过这么些赋值未来今后的X-Forwarded-For的值就成为了“客商的真实ip,第黄金年代台nginx的ip”,那样就清楚了吧。

 

末了我们看看还或然有三个$http_x_forwarded_for变量,这几个变量正是X-Forwarded-For,由于事先我们说了,暗许的那么些X-Forwarded-For是为空的,所以当我们直接行使proxy_set_header            X-Forwarded-For$http_x_forwarded_for时会开采,web服务器端使用request.getAttribute("X-Forwarded-For")得到的值是null。假诺想要通过request.getAttribute("X-Forwarded-For")得到客商ip,就非得先利用proxy_set_header            X-Forwarded-For$proxy_add_x_forwarded_for;这样就能够猎取客商实际ip。

此部分故事情节出自:

三、小结

1)通过本文,应该比较清楚的汇报了一流、二级域名的布署;

2)通过各个气象,应该描述清楚了location各个景况的转变配置;

3)援引其余散文,解说了一些参数的意思

4)各样繁复的景况,还亟需基于具体的业务及须要开展配置,这里的事例相对都比较容易。


0


0

查看争辩

注意:本文出自 “阿飞”的博客 ,要是要转发本文章,请与笔者联系! 并声明来源: ...

            index  index.html index.htm;

server {

    location / {

那么$proxy_add_x_forwarded_for又是何许?

                            proxy_pass                  ; 

        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

现在的$proxy_add_x_forwarded_for变量的"X-Forwarded-For"部分是空的,所以唯有$remote_addr,而$remote_addr的值是顾客的ip,于是赋值今后,X-Forwarded-For变量的值正是顾客的忠实的ip地址了。

 

 2.反向代理:

           proxy_redirect              off;

        server_必嬴56net官网,name  localhost;

nginx通过proxy_pass 配置代理站点,upstream模块实现http负载均衡。

part1:解决方案

           proxy_redirect              off;

        proxy_set_header X-Real-IP $remote_addr;

        location /{

        location /{

  反向代理(Reverse Proxy)实际运作方式是指以代理服务器来选取internet上的总是央浼,然后将号召转载给内部互连网上的服务器,并将从服务器上猎取的结果再次来到给internet上倡议连接的客商端,这个时候期理服务器对外就显现为一个服务器。规范用途是将 防火墙前边的服务器提供给Internet客商访谈

                            proxy_pass                  ; 

如果$http_x_forwarded_for不为空: $proxy_add_x_forwarded_for = $remote_addr

 

那样就掌握了吧。

$remote_addr是一贯与nginx通讯的那台主机的ip。

 

part2:原理介绍

        }

 3.反向代理用做内网域名转载

           proxy_set_header            X-real-ip $remote_addr;

                     # proxy_set_header            X-Forwarded-For $http_x_forwarded_for;

必嬴56net官网 1

server {

里面那么些X-real-ip是三个自定义的变量名,名字能够随便取,那样做完现在,顾客的诚实ip就被放在X-real-ip那些变量里了,然后,在web端能够如此获取:

vim /usr/local/nginx/conf/reverse-proxy.conf

        #charset koi8-r;

 

server

编辑:服务器&运维 本文来源:必嬴56net官网选择Nginx后如何在web应用中得到客商

关键词: