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

栏目: 服务器 · 发布时间: 7年前

内容简介:生产环境中Nginx既做Web服务又做反向代理

一、感想

众所周知,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


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Scalable Internet Architectures

Scalable Internet Architectures

Theo Schlossnagle / Sams Publishing / 2006-7-31 / USD 49.99

As a developer, you are aware of the increasing concern amongst developers and site architects that websites be able to handle the vast number of visitors that flood the Internet on a daily basis. Sc......一起来看看 《Scalable Internet Architectures》 这本书的介绍吧!

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具