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

CentOS 配置 Nginx 反向代理

298次阅读
没有评论

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

导读 Nginx 作为反向代理服务器被广泛使用在各大互联网企业。它简单易用,可以根据业务的需求将其不同的业务类型代理至不同的服务器,将整个站点请求压力按类型分摊到不同的服务器。该方式使的整个站点请求性能得以极大的提升。本文简要描述了 Nginx 几种不同情形的代理演示,供大家参考。
一、反向代理及演示环境描述
1、反向代理

在计算机网络中,反向代理是一种代理服务器,代表客户端从一个或多个服务器检索资源。然后将这些资源返回给客户机,就像它们源自 Web 服务器本身一样。与正向代理相反,正向代理是与其关联的客户端联系任何服务器的中介,反向代理是任何客户端与其关联的服务器进行联系的中介。

有关正向代理可参考:基于 CentOS 7 配置 Nginx 正向代理

2、本演示中的几个服务器

CentOS 配置 Nginx 反向代理

二、常规反向代理配置
1、后端服务器配置 (Apache)

后端 Apache 服务器主机名及 IP

# hostname
  centos7-web.example.com
# more /etc/redhat-release
  CentOS Linux release 7.2.1511 (Core)
# ip addr|grep inet|grep global
  inet 172.24.8.128/24 brd 172.24.8.255 scope global eno16777728

# systemctl start httpd.service
# echo "This is a httpd test page.">/var/www/html/index.html
# curl http://localhost
  This is a httpd test page.
2、前端 Nginx 反向代理服务器配置

前端 Nginx 服务器主机名及 IP

# hostname
  centos7-router

  # more /etc/redhat-release
  CentOS Linux release 7.2.1511 (Core)
  # ip addr |grep inet|grep global
  inet 172.24.8.254/24 brd 172.24.8.255 scope global eno16777728
  inet 192.168.1.175/24 brd 192.168.1.255 scope global dynamic eno33554960

Nginx 版本

# nginx -V
  nginx version: nginx/1.10.2

添加一个新的配置文件用作反向代理

# vim /etc/nginx/conf.d/reverse_proxy.conf
  server {
    listen 8090;
    server_name localhost;

  location / {
    proxy_pass http://172.24.8.128; ### 反向代理核心指令

    proxy_buffers 256 4k;
    proxy_max_temp_file_size 0;
    proxy_connect_timeout 30;

    proxy_cache_valid 200 302 10m;
    proxy_cache_valid 301 1h;
    proxy_cache_valid any 1m;
    }
  }

# systemctl reload nginx
# ss -nltp|grep nginx|grep 8090
LISTEN 0 128 *:8090 *:* users:(("nginx",pid=78023,fd=8),("nginx",pid=78021,fd=8))

# curl http://localhost:8090 ## 基于本地测试
This is a httpd test page.

查看 Apache 服务器日志

# more /var/log/httpd/access_log ## 请求 IP 地址为 172.24.8.254,当从其他机器请求时也是 172.24.8.254 这个 IP
172.24.8.254 - - [30/Oct/2017:14:02:38 +0800] "GET / HTTP/1.0" 200 27 "-" "curl/7.29.0"
3、反向代理服务器及后端服务器日志格式设置

为 Nginx 服务器添加 proxy_set_header 指令,修改后如下

# grep proxy_set_header -B2 /etc/nginx/conf.d/reverse_proxy.conf
  location / {
    proxy_pass http://172.24.8.128;
    proxy_set_header X-Real-IP $remote_addr;
    }
# systemctl reload nginx.service

后端服务器 Apache 日志格式设置

# vim /etc/http/conf/httpd.conf

# LogFormat "%h %l %u %t \"%r\"%>s %b \"%{Referer}i\"\"%{User-Agent}i\"" combined #注释此行,添加下一行
    LogFormat "%{X-Real-IP}i %l %u %t \"%r\"%>s %b \"%{Referer}i\"\"%{User-Agent}i\"" combined #关键描述 {X-Real-IP}i

# ip addr|grep inet|grep global    #从 1.132 主机访问
  inet 192.168.1.244/24 brd 192.168.1.255 scope global eth0

# curl http://192.168.1.175:8090  #从 1.244 主机访问
  This is a httpd test page

#再次查看 apache 访问日志,如下,不再是代理服务器 IP 地址,此时显示为 1.244
  192.168.1.244 - - [30/Oct/2017:15:49:07 +0800] "GET / HTTP/1.0" 200 27 "-" "curl/7.19.7 (x86_64-redhat-linux-gnu)
  libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2"
二、基于目录匹配反向代理

后端服务器采用 Nginx 的配置

# more /etc/redhat-release ##os 平台及 ip 地址
  CentOS release 6.7 (Final)
# ip addr|grep eth0|grep global
  inet 192.168.1.132/24 brd 192.168.1.255 scope global eth0
# nginx -v ##nginx 版本
  nginx version: nginx/1.10.2

# mkdir -pv /usr/share/nginx/html/images ## 创建图片目录
  mkdir: created directory `/usr/share/nginx/html/images'

# cp /usr/share/backgrounds/nature/*.jpg /usr/share/nginx/html/images/. ## 复制图片文件

# cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bk
# vim /etc/nginx/conf.d/default.conf ## 此处直接修改缺省配置文件

  server {
  listen 80 default_server;
  listen [::]:80 default_server;
  server_name _;
  root /usr/share/nginx/html;

# Load configuration files for the default server block.
  include /etc/nginx/default.d/*.conf;

  location / { }

  location /images {alias /usr/share/nginx/html/images; ## 此处配置了别名}

  error_page 404 /404.html;
  location = /40x.html { }

  error_page 500 502 503 504 /50x.html;
  location = /50x.html {}}

# /etc/init.d/nginx reload
Reloading nginx: [OK]

前端 Nginx 配置

# vim /etc/nginx/conf.d/reverse_proxy.conf
  server {
  listen 8090;
  server_name localhost;

  location / {
    proxy_pass http://172.24.8.128;
    proxy_set_header X-Real-IP $remote_addr;
    }

  location /images { ## 将 images 目录下的文件代理至 192.168.1.132
    proxy_pass http://192.168.1.132;
    proxy_set_header X-Real-IP $remote_addr;
    }
  }

# systemctl reload nginx

验证代理情况,在 ip 为 192.168.1.244 测试对 images 目录下的 jpg 文件请求

# ip addr|grep inet|grep global
  inet 192.168.1.244/24 brd 192.168.1.255 scope global eth0
# curl -I http://192.168.1.175:8090/images/Garden.jpg
  HTTP/1.1 200 OK
  Server: nginx/1.12.2
  Date: Tue, 31 Oct 2017 01:48:18 GMT
  Content-Type: image/jpeg
  Content-Length: 264831
  Connection: keep-alive
  Last-Modified: Mon, 30 Oct 2017 08:21:28 GMT
  ETag: "59f6e108-40a7f"
  Accept-Ranges: bytes
三、基于特定文件类型的反向代理配置

php 服务器端配置 (ip 192.168.1.132)

# ss -nltp|grep php
  LISTEN 0 128 192.168.1.132:9000 *:* users:(("php-fpm",7147,8),("php-fpm",7148,0),("php-fpm",7149,0))

# mkdir -pv /data ### 存放 php 代码
# echo "/data 192.168.1.0/24(rw)" >/etc/exports
# /etc/init.d/rpcbind start
# /etc/init.d/nfslock start
# /etc/init.d/nfs start

  # echo "< ?php phpinfo();?>" > /data/index.php

Nginx 代理端配置 (ip 192.168.1.175)

# mkdir /data
# mount -t nfs 192.168.1.132:/data /data
# ls /data
  index.php

# vim /etc/nginx/conf.d/reverse_proxy.conf
  server {
  listen 8090;
  server_name localhost;

  location / {
    proxy_pass http://172.24.8.128;
    proxy_set_header X-Real-IP $remote_addr;
    }

  location /images {
    proxy_pass http://192.168.1.132;
    proxy_set_header X-Real-IP $remote_addr;
    }

  location ~ \.php$ {
    root /data;
    fastcgi_pass 192.168.1.132:9000;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
    include fastcgi_params;
    }
  }

# systemctl restart nginx

测试反向代理至 php

[root@ydq05 ~]# ip addr|grep inet|grep global
  inet 192.168.1.244/24 brd 192.168.1.255 scope global eth0
  [root@ydq05 ~]# curl -I http://192.168.1.175:8090/index.php
  HTTP/1.1 200 OK
  Server: nginx/1.12.2
  Date: Tue, 31 Oct 2017 03:22:59 GMT
  Content-Type: text/html; charset=UTF-8
  Connection: keep-alive
  X-Powered-By: PHP/5.6.0
四、基于 upstream 配置反向代理至 tomcat

Nginx upstream 指令也可以将请求代理到后端服务器 如下示例,结合 upstream 指令演示将其代理到 tomcat

# vim /etc/nginx/conf.d/tomcat.conf 
upstream app {
                server localhost:8080;
                keepalive 32;
}

server {
    listen 80;
    server_name localhost;
    location / {
        proxy_set_header Host $host;
        proxy_set_header x-for $remote_addr;
        proxy_set_header x-server $host;
        proxy_set_header x-agent $http_user_agent;
        proxy_pass http://app;
    }
}

[root@node132 conf.d]# ss -nltp|grep java
LISTEN    0  1    ::ffff:127.0.0.1:8005  :::*      users:(("java",39559,45))
LISTEN    0  100                :::8009  :::*      users:(("java",39559,43))
LISTEN    0  100                :::8080  :::*      users:(("java",39559,42))

tomcat 版本
[root@node132 conf.d]# /usr/local/tomcat/bin/catalina.sh version
Using CATALINA_BASE:  /usr/local/tomcat
Using CATALINA_HOME:  /usr/local/tomcat
            ....
Server version: Apache Tomcat/7.0.69
Server built:  Apr 11 2016 07:57:09 UTC
Server number:  7.0.69.0
OS Name:        Linux
OS Version:    2.6.32-573.el6.x86_64
Architecture:  amd64
JVM Version:    1.7.0_79-b15
JVM Vendor:    Oracle Corporation

验证结果
# curl http://localhost

< !DOCTYPE html>
        
        
        
    
    ......
五、proxy 模块指令描述

proxy 模块的可用配置指令非常多,它们分别用于定义 proxy 模块工作时的诸多属性,如连接超时时长、代理时使用 http 协议版本等。下面对常用的指令做一个简单说明。

    • proxy_connect_timeout   nginx 将一个请求发送至 upstream server 之前等待的最大时长;

 

    • proxy_cookie_domain   将 upstream server 通过 Set-Cookie 首部设定的 domain 属性修改为指定的值,其值可以为一个字符串、正则表达式的模式或一个引用的变量;

 

    • proxy_cookie_path    将 upstream server 通过 Set-Cookie 首部设定的 path 属性修改为指定的值,其值可以为一个字符串、正则表达式的模式或一个引用的变量;

 

    • proxy_hide_header   设定发送给客户端的报文中需要隐藏的首部;

 

    • proxy_pass   指定将请求代理至 upstream server 的 URL 路径;

 

    • proxy_set_header   将发送至 upsream server 的报文的某首部进行重写;

 

    • proxy_redirect   重写 location 并刷新从 upstream server 收到的报文的首部;

 

    • proxy_send_timeout   在连接断开之前两次发送至 upstream server 的写操作的最大间隔时长;

 

    proxy_read_timeout    在连接断开之前两次从接收 upstream server 接收读操作的最大间隔时长;

如下面的一个示例:

proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    client_max_body_size 10m;
    client_body_buffer_size 128k;
    proxy_connect_timeout 30;
    proxy_send_timeout 15;
    proxy_read_timeout 15;

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

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

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7991246
文章搜索
热门文章
星哥带你玩飞牛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+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face 免费服务器 +Docker 快速部署 HertzBeat 监控平台 ...
星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛NAS-2:飞牛配置RAID磁盘阵列

星哥带你玩飞牛 NAS-2:飞牛配置 RAID 磁盘阵列 前言 大家好,我是星哥之前星哥写了《星哥带你玩飞牛 ...
星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛NAS-14:解锁公网自由!Lucky功能工具安装使用保姆级教程

星哥带你玩飞牛 NAS-14:解锁公网自由!Lucky 功能工具安装使用保姆级教程 作为 NAS 玩家,咱们最...
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

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

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...

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

一言一句话
-「
手气不错
星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛 NAS 硬件 02:某鱼 6 张左右就可拿下 5 盘位的飞牛圣体 NAS 前言 大家好,我是星...
国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号AI知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率

国产开源公众号 AI 知识库 Agent:突破未认证号限制,一键搞定自动回复,重构运营效率 大家好,我是星哥,...
12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换...
多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞...
颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

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

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