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

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

433次阅读
没有评论

共计 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、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19350
评论数
4
阅读量
7961034
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
安装并使用谷歌AI编程工具Antigravity(亲测有效)

安装并使用谷歌AI编程工具Antigravity(亲测有效)

  安装并使用谷歌 AI 编程工具 Antigravity(亲测有效) 引言 Antigravity...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
星哥带你玩飞牛NAS-5:飞牛NAS中的Docker功能介绍

星哥带你玩飞牛NAS-5:飞牛NAS中的Docker功能介绍

星哥带你玩飞牛 NAS-5:飞牛 NAS 中的 Docker 功能介绍 大家好,我是星哥,今天给大家带来如何在...
开发者福利:免费 .frii.site 子域名,一分钟申请即用

开发者福利:免费 .frii.site 子域名,一分钟申请即用

  开发者福利:免费 .frii.site 子域名,一分钟申请即用 前言 在学习 Web 开发、部署...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...
颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

  颠覆 AI 开发效率!开源工具一站式管控 30+ 大模型 ApiKey,秘钥付费 + 负载均衡全...
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...
安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装 Black 群晖 DSM7.2 系统安装教程(在 Vmware 虚拟机中、实体机均可)! 前言 大家好,...
星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的NAS中!

星哥带你玩飞牛 NAS-10:备份微信聊天记录、数据到你的 NAS 中! 大家对「数据安全感」的需求越来越高 ...