阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

生产环境中Nginx既做Web服务又做反向代理

208次阅读
没有评论

共计 5490 个字符,预计需要花费 14 分钟才能阅读完成。

一、感想

众所周知,Nginx 是一个高性能的 HTTP 和反向代理服务器,在以前工作中要么实现 http 要么做反向代理或者负载均衡。尚未在同一台 Nginx 或者集群上同时既实现 HTTP 又实现反向代理。

那么到底 Nginx 能否既实现 HTTP 又实现反向代理呢?

答案是肯定的

刚好前段时间在实际项目中有一个类似的情况出现,由此与大伙分享,由于以前没有写博文的习惯,只习惯于自己记录操作实现步骤及稳定,在以前常遇见问题都是百度、谷歌,众位网友的博文帮助自己见解决了很多问题。

由此可见技术分享的重要性,好在现在自我感觉对于 linux 有了一定的了解,目前正在进行对以前工作文档的整理,以后会逐步在博文中与大家分享。

闲话少说:

以下是如何实现在 Nginx 上既实现 HTTP 又实现反向代理。

二、环境概述:

由于是生产环境而且有一定的秘密可言涉及到的 ip 地址会做一些处理:

生产环境中 Nginx 既做 Web 服务又做反向代理

描述外网访问通过防火墙 NAT 负载均衡地址访问 nginx 提供的 web 服务器访问主要业务,部分业务需要有 nginx 代理至内网 web 服务器,由于内网有防火墙和负载均衡,且内网负载均衡也被防火墙 nat 了一个地址出来作为提供服务,所以在此可以忽略内网 ip 地址,以下只是对于 nginx 服务器进行操纵。nginx 所代理的地址为 XXXXX(由于生产环境故而隐去地址。)

三、实际配置:

本文只讲述 nginx 同时提供 web 和代理服务由此安装 nginx 忽略。

1、配置 web 服务器.

在 nginx 配置文件目录下及 nginx 路径下的 conf 文件下 nginx 主配置文件其实相当简单主要配置为以下:

nginx.conf 文件


#user  root;
worker_processes  4;                    #采用 worker 进程模式默认 1,这里设置成 4,根据服务器的 cpu 数量设定,最大不超过 cpu 数量的 2 倍

error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
    worker_connections  1024;        #在 events 下其实还有 epoll 模型不过在此 nginx 版本中默认就是 epoll
}

http {
    include      mime.types;
    default_type  application/octet-stream;

load_iguard /usr/local/iguard/syncserver/mod_nginx/libigx.so  /usr/local/iguard/syncserver/mod_nginx/mod_iguard3.conf;
enable_iguard on;

    log_format  main  ‘$remote_addr – $remote_user [$time_local] “$request” ‘
                      ‘$status $body_bytes_sent “$http_referer” ‘
                      ‘”$http_user_agent” “$http_x_forwarded_for”‘;
    access_log  logs/access.log  main;
  sendfile        on;
    #tcp_nopush    on;
  #keepalive_timeout  0;
    keepalive_timeout  65;
    include        extra/upstream.conf;                       #这里是关键在 conf 目录下创建一个 upstream.conf 文件来设置 web 服务站点以及反向代理,的话所有配置必须在主配置文件中,为了使配置更有层次感这里将配置拆分。
    #gzip  on;
}

2、在 conf 目录下的 extra/upstream.conf;默认是没有这个文件的必须手动创建;

先 cd  到 conf/(根据实际情况 conf 在 nginx 的安装路径下如 nginx 安装在 /usr/local 下那么 conf 文件就在 /usr/local/nginx/conf 下)下面

以在 nginx 安装在 /usr/local 为例子:

cd  /usr/local/nginx/conf 

mkdir   extra

cd extra

vim upstream.conf  或者是 vi   upstream.conf  以下配置只是部分。

upstream trs {#给代理服务命名只是本地有效方便代理调用,trs 表示名字,实际上可以取任何名字:如张三李四都行。
              server xx.xx.xx.xx:8080; #真实服务器地址实际上是防火墙映射了内网负载均衡地址及端口。对于 nginx 做负载均衡也在此配置只需加多

个 server 即可实现负载均衡,nginx 做负载均衡 默认算法是 wrr权重轮询。由于在此内网环境中已经有防火墙和负载均衡故而只需写防火墙映射出来的地址及端口.

负载均衡可参考http://nginx.org/en/docs/http/ngx_http_upstream_module.html

                                                                         
}                                                                #这里只以一个需要反向大力的服务为例子;真实环境有 8 个服务。实际上配置都一样。
server {
        listen      80; #nginx 监听 80 端口用以提供 web 服务。
        server_name  localhost;
        ssi on;
        ssi_silent_errors off;
        ssi_types text/shtml;
        #charset koi8-r;
        root  /ucap/websites;

        #access_log  logs/host.access.log  main;

        location /{
              autoindex on;
              root  /xxx/websites;
            index  index.html index.htm index.shtml;
        }

        location /zgcd {
                autoindex on;
                        alias    /xxx/websites/zgcd;
            index  index.html index.htm index.shtml;
        }

        location /qlsgzxxw {
                autoindex on;
                        alias    /xxx/websites/qlsgzxxw;
            index  index.html index.htm index.shtml;
        }

        location /cdstb {
                autoindex on;
                        alias    /xxx/websites/cdstb;
            index  index.html index.htm index.shtml;
        }

##### 红色部分配置为提供 web 服务配置。
    location  /trsapp{#此配置为提供代理服务配置
          root /ucap/websites;
          proxy_pass  http://trs/trsapp;                      

#这里调用的是 upstream 下的名字表示的是用一旦访问 web 站点下 /trsapp 及代理至 http://10.1.1.1:8080/trsapp

          proxy_redirect default;
          proxy_set_header REMOTE-HOST $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header Host $host:8001;            #这里是关键由于这个问题花费了一天时间才查出问题关键,稍后会有代理故障问题会展示。
          proxy_set_header  Cookie $http_cookie;
      }
      #server {
    #    listen      81;
    #    server_name  localhost;

    #    #??
                #    location  / {
    #            proxy_pass  http://23.202.1.211;
    #      }
      #    }

3、upstream 配置参数说明:

Proxy主要选项:

proxy_set_header

设置由后端服务器获取用户的主机名或者真实的 ip 地址,以及代理者的真实 ip 地址。

client_body_buffer_size

用户制定客户端请求主体缓冲区大小,可以理解为先保存到本地再传给用户。

proxy_connect_timeout

表示与后台的服务器连接超时时间,即发起握手等候的响应超时时间。

proxy_send_timeout

表示后端服务器的数据回传时间,即再规定时间之内后端服务器必须传完所有数据,否则,nginx将断开这个连接。

proxy_read_timeout

设置 nginx 从代理的后端服务器获取信息的时间,表示连接建立成功后,nginx等待后端服务器的响应时间,其实是 nginx 已经进入后端的排队之中等候处理的时间。

proxy_buffer_size

设置缓冲区大小,默认,该缓冲区大小等于指令 proxy_buffer_size 设置的大小

proxy_buffers

设置缓冲区的数量和大小,nginx从代理的后端服务器获取的响应信息,会放置再缓冲区。

proxy_busy_buffer_size

设置系统繁忙是将可使用 proxy_buffers 大小,官方推荐为:proxy_buffers的两倍

proxy_temp_file_write_size

指定 proxy 缓存临时文件的大小。

可参考:http://liuyu.blog.51cto.com/183345/166381/

4、对 proxy_set_header Host $host:8001; 当不指定端口 而引起的故障问题 
1)故障重现稍后:

生产环境中 Nginx 既做 Web 服务又做反向代理

 

2)解决方法 proxy_set_header Host $host:8001;

四、测试实现功能:

web 已经能实现可以看出采用的是 web 配置中的 /cdstb生产环境中 Nginx 既做 Web 服务又做反向代理

代理功能实现点击 web 服务在线互动中的电子信箱 nginx 代理至后台服务器 /trsapp:

生产环境中 Nginx 既做 Web 服务又做反向代理

CentOS 6.2 实战部署 Nginx+MySQL+PHP http://www.linuxidc.com/Linux/2013-09/90020.htm

使用 Nginx 搭建 WEB 服务器 http://www.linuxidc.com/Linux/2013-09/89768.htm

搭建基于 Linux6.3+Nginx1.2+PHP5+MySQL5.5 的 Web 服务器全过程 http://www.linuxidc.com/Linux/2013-09/89692.htm

CentOS 6.3 下 Nginx 性能调优 http://www.linuxidc.com/Linux/2013-09/89656.htm

CentOS 6.3 下配置 Nginx 加载 ngx_pagespeed 模块 http://www.linuxidc.com/Linux/2013-09/89657.htm

CentOS 6.4 安装配置 Nginx+Pcre+php-fpm http://www.linuxidc.com/Linux/2013-08/88984.htm

Nginx 安装配置使用详细笔记 http://www.linuxidc.com/Linux/2014-07/104499.htm

Nginx 日志过滤 使用 ngx_log_if 不记录特定日志 http://www.linuxidc.com/Linux/2014-07/104686.htm

Nginx 的详细介绍:请点这里
Nginx 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-04/142787.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计5490字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中