Nginx反向代理功能

Nginx反向代理:

以入口点的方式接受来自客户端的请求,但是本身不存在任何数据,而是交由后端服务器进行处理后,再返回里客户端

请求            客户端发起请求------>代理服务器------------------------------>后端服务器

返回            后端服务器------------->代理服务器------------------------------>客户端

在这个过程客户端是不主动向后端服务器请求的,后端服务器也不直接向客户端返回数据

公司常用:

1、实现跨地区的代理服务器

例如:业务服务器在北京,但是有港台的客户需要访问,但是客户直接从港台访问北京的服务器,网络环境很差,这时候就需要用到反向代理功能,作为可以提高网络环境主要有三个要素

客户只需要保证他到港台服务器的网络性能即可,而真实与北京服务器进行交互的是港台的服务器,服务器之间的网络性能在基础上要比客户直接来访问要好很多,如果是有专线的情况下

那么网络环境是非常好的。

2、用于安全考虑

有的环境需要隐藏后端服务器的真是IP地址,这样的环境使用反向代理,客户访问到的只能是反向代理服务器(域名指向的是反向代理服务器),只能获取到反向代理服务器的ip地址

而代理服务器上是不存在任何数据

3、用于负载均衡,配合upstream

反向代理常用配置参数解释:

Nginx负载均衡反向代理搭建

一、测试站点搭建:

基础环境:


主机


域名


访问内容


主机名


192.168.110.40


learn1.proxy.com


learn  proxy   001

learn proxy   002


[[email protected]_proxy_40 ~]#,后端服务器


192.168.110.46


learn2.proxy.com


learn proxy  001

learn proxy   002


[[email protected]_proxy_46 ~]# ,后端服务器2


192.168.110.47


learn1.proxy.com

learn2.proxy.com


代理服务器

Nginx负载均衡反向代理:

192.168.110.40

[[email protected]_proxy_40 ~]#mkdir /data/www/learn1.proxy.com

[[email protected]_proxy_40 ~]#echo  "learn1 proxy 001" >/data/www/learn1.proxy.com/learn1.php

[[email protected]_proxy_40 ~]#vim /usr/local/nginx/conf/vhost/learn1.proxy.com

server

{

listen       80;

server_name  learn1.proxy.com;

index index.php  index.html index.htm;

root  /data/www/learn1.proxy.com;

error_log  /data/weblogs/learn1_error.log  crit;

access_log  /data/wwwlogs/learn1.log  access;

location ~ \.php$ {

fastcgi_pass   127.0.0.1:9000;

fastcgi_index  index.php;

fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

include        fastcgi.conf;

}

}

[[email protected] ~]# curl "http://learn1.proxy.com/learn1.php"

learn proxy 001

[[email protected]_proxy_40 ~]#mkdir /data/www/learn2.proxy.com

[[email protected]_proxy_40 ~]#echo  "learn1 proxy 002" >/data/www/learn2.proxy.com/learn2.php

[[email protected]_proxy_40 ~]#vim /usr/local/nginx/conf/vhost/learn2.proxy.com

server

{

listen       80;

server_name  learn2.proxy.com;

index index.php  index.html index.htm;

root  /data/www/learn2.proxy.com;

error_log  /data/weblogs/learn2_error.log  crit;

access_log  /data/wwwlogs/learn2.log  access;

location ~ \.php$ {

fastcgi_pass   127.0.0.1:9000;

fastcgi_index  index.php;

fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

include        fastcgi.conf;

}

}

通过上面的配置,已经可以实现两个站点的正常访问,区分开两个站点是分别不同的两台主机

但是在真是生产环境,它们的内容是相同,只是为了方便测试才这样区分的

192.168.110.46的配置同192.168.110.40配置流程一样,切记配置啊,要不不能出结果了

二、负载均衡反向代理搭建:

192.168.110.47,反向代理服务器

[[email protected]_server ~]#vim /usr/local/nginx/conf/vhost/myproxy

upstream  learn_server_proxy  {

server 192.168.110.46:80  weight=1;

server 192.168.110.40:80  weight=1;

}

[[email protected]_server vhost]# vim /usr/local/nginx/conf/vhost/learn1-proxy.com

server {

listen  80;

server_name   learn1.proxy.com;

location / {

proxy_pass  http://learn_server_proxy;

proxy_set_header Host  $host;

proxy_set_header  X-Forwarded-For $remote_addr;

}

}

[[email protected]_server wwwlogs]# vim /usr/local/nginx/conf/vhost/learn2-proxy.com

server {

listen  80;

server_name   learn2.proxy.com;

location / {

proxy_pass  http://learn_server_proxy;

proxy_set_header Host  $host;

proxy_set_header  X-Forwarded-For $remote_addr;

}

}

测试方法:

在本地host写入

192.168.110.47  learn2.proxy.com

192.168.110.47  learn1.proxy.com

然后去访问这两个域名,下面 是我测试的截图

反向代理服务器日志截图

注意看我标注红框的两个位置,左手边的红框内显示的是请求地址,也就是客户端地址。

右手边红框标注的是客户端发起的请求是由后端的那些服务器进行处理的

咱们刚开始要实现的就是负载均衡的反向代理,通过日志我们可以看到,从192.168.110.168发出的请求,会由

server 192.168.110.46:80  weight=1;

server 192.168.110.40:80  weight=1;

这两台主机同时处理,轮询算法。

后端服务器日志截图

左手边的红框是客户端的ip地址,而右手边的红框是代理服务器的ip地址,日志显示方式做个处理下面会说

后端服务器日志格式配置:

log_format  access  ‘$http_x_forwarded_for  - $remote_user [$time_local] "$request" ‘

‘$status $body_bytes_sent "$http_referer" ‘

‘"$http_user_agent" "$remote_addr" ‘

‘"$request_time" "$upstream_response_time" "$upstream_addr" ‘;

我是将$remote_add和$http_x_forwarded_for互换了一下位置,$http_x_forwarded_for这个参数是配置可以让nginx获取到真实的ip地址

TCP反向代理配置

首先需要准备一个可以测试的代码,这么没办法提供,只能自己想办法了。

Nginx代理服务器配置

安装扩展模块

1、首先查看现在已经编译的模块

[[email protected]_server package]#/usr/local/nginx/sbin/nginx -V    #查看nginx已经编译好的参数,后面也需要将这些模块重新编译

configure arguments: --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

2、下载需要编译的模块

[[email protected]_server package]#wget https://github.com/yaoweibin/nginx_tcp_proxy_module/archive/master.zip

[[email protected]_server package]# unzip master.zip

新模块:--add-module=/data/package/nginx_tcp_proxy_module-master/ #模块存放路径

3、进入nginx安装目录

进行重新编译,需要加上之前已经编译过的参数

[[email protected]_server package]# tar  zxvf tengine-2.0.3.tar.gz

[[email protected]_server package]# cd /data/package/tengine-2.0.3

[[email protected]_server package]# patch -p1 < /data/package/nginx_tcp_proxy_module/tcp.patch

[[email protected]_server package]# ./configure --user=www --group=www --prefix=/usr/local/nginx --with- http_stub_status_module --with-http_ssl_module --add-module=/data/package/nginx_tcp_proxy_module-master/

[[email protected]_server package]# make

切勿进行make install这样就重新安装了

4、替换nginx二进制文件

[[email protected]_server package]#cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak #先备份

[[email protected]_server package]#cp -rfp /data/package/tengine-2.0.3/objs/nginx /usr/local/nginx/sbin/ 替换

5、重载

[[email protected]_server package]#make upgrade

6、验证

[[email protected]_server package]# /usr/local/nginx/sbin/nginx -V

configure arguments: --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/data/package/nginx_tcp_proxy_module-master/   ##添加成功

配置Nginx配置文件

user  www www;

worker_processes 4;

events

{

use epoll;

worker_connections 1204;

}

http

{

include       mime.types;

default_type  application/octet-stream;

sendfile on;

tcp_nopush     on;

keepalive_timeout 60;

tcp_nodelay on;

server_tokens off;

#log format

log_format  access  ‘$remote_addr - $remote_user [$time_local] "$request" ‘

‘$status $body_bytes_sent "$http_referer" ‘

‘"$http_user_agent" "$http_x_forwarded_for" ‘

‘"$request_time" "$upstream_response_time" "$upstream_addr" ‘;

#upstream myfastcgi  {

#          server  192.168.110.40:9000 weight=1 max_fails=2 fail_timeout=30;

#          server  192.168.110.46:9000 weight=1 max_fails=2 fail_timeout=30;

# }

}

#tcp区块开始

tcp {

timeout 1d;

proxy_read_timeout 10d;          #设置Nginx从代理的后端服务器获取信息的时间,Nginx等待代理后端服务器的超时时间

proxy_send_timeout 10d;          #代理后端服务器的数据回传时间,即在规定时间内后端服务器必须传完所有的数据,否则Nginx将断开这个连接

proxy_connect_timeout 30;     #表示反向代理服务器与后端节点服务器连接的超时时间,及发起握手等候响应的超时时间

include ./vhost/*;                    #应用./host/目录下的所有文件

}

#tcp区块结束

主要是增加了tcp区块的配置

tcp区块不允许配置在http区块和server区块中

upstream  配置

[[email protected]_server vhost]# vim /usr/local/nginx/conf/vhost/loadblance.tcp

upstream  tcp8888  {

server 192.168.110.40:8888 weight=1;                                     #后端服务器的tcp    ip:port

check interval=10000 rise=3 fall=2 timeout=1000;          #健康检查机制

}

interval:向后端发送健康检查包的间隔

rise:如果连续成功次数达到rise配置的参数,服务器被认定为up

fall:如果连续失败粗疏达到fall配置的参数,服务器被认定为down

timeout:后端健康请求的超时时间

因为我测试的tcp连接是tcp 8888端口所以我是这么写的,具体测试端口自行修改

虚拟主机配置文件配置

vim /usr/local/nginx/conf/vhost/tcp_proxy.tcp

server {

listen  8888;                                                                                           #监听端口

server_name   chat.proxy.com;                                                  #访问域名

access_log /data/weblogs/nginx/tcp8888.access.log;   #日志记录

proxy_pass  tcp8888;                                                                     #应用upstream定义池名称

so_keepalive on;                                                                              #心跳检测开启

tcp_nodelay on;                                                                                #有效提高数据的实时响应性

}

测试方法:

在客户端写入host

192.168.110.47  chat.proxy.com

访问chat.proxy.com域名

http://chat.proxy.com:8888/

原文地址:https://www.cnblogs.com/bazingafraser/p/8505052.html

时间: 2024-08-02 15:49:02

Nginx反向代理功能的相关文章

nginx反向代理功能及常用配置

反向代理指的是用代理服务器来响应客户端的请求,然后根据一定的调度算法将请求发送到后端服务器,当后端服务器处理完请求后,再将请求处理的结果发送给反向代理服务器,由代理服务器将处理结果发送给客户端的一种数据请求模式.Nginx作为近年来比较火的反向代理服务器,主要用于转发客户机请求,后台有多个http服务器提供服务,nginx的功能就是把请求转发给后面的服务器,决定哪台目标主机来处理当前请求. 后端的服务器我们在这里称为upstream server,在上图所示中,中间的反向代理服务器,首先自己扮演

Nginx反向代理,负载均衡,redis session共享,keepalived高可用

相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tomcat服务器两台,由nginx进行反向代理和负载均衡,此处可搭建服务器集群. redis服务器一台,用于session的分离共享. nginx主服务器:192.168.50.133 nginx备服务器:192.168.50.135 tomcat项目服务器1:192.168.50.137 tomcat项目服务器2:192.168.50.139 redis服

Cento7+Nginx反向代理实现多域名跳转

近期比较忙,所以很少写文档了,最近有个项目组有多个环境需要做映射,所以就想到了通过Nginx反向代理实现多域名地址跳转,以致就总结了一下,其实说到代理我们大家都知道.最常见最常说的所谓的就是NAT,就是将内部多个地址请求通过代理转达到外部.这个就叫正向代理,那什么是反向代理呢-就是和正向代理相反:所以很好理解,Nginx反向代理功能很强大,可以通过一个nginx代理实现多个域名及不同的端口进行代理转发,所以在日常的运维中很有帮助.我们今天的演示是通过Nginx反向代理实现内部不同的多个域名转发.

Linux平台部署nginx反向代理实例

nginx有着优秀的代理性能,很多情况下,nginx常常被充当反向代理服务器负载后端应用web构建起一个高性能高可用的web集群(淘宝tengix ,京东的nginx集群都使用到了nginx反向代理功能),接下来给大家讲解Linux平台部署nginx反向代理实例. [本文档所介绍的内容适用于公司测试/生产等常见的nginx反向代理应用] 1. nginx环境部署前准备: 1.1相关软件以及系统 系统要求:Centos 6.0以上 (64位) 相关中间件:Nginx: 1.6.0 以上(包含1.6

nginx反向代理tomcat日志获取真实IP

今天测试一下nginx反向代理功能时,让tomcat日志里获取用户真实IP地址,谷歌了一下,都是一篇文章的内容,复制了tomcat配置文件中的要修改的内容,可怎么也获取不到,神奇了就!无奈之下,仔细读每行复制的内容,发现问题了,估计都要是搜索到那篇文章的话,都得无法获取真实IP地址,就一个小小的地方.开始检查配置内容: (1)nigix  nginx.conf配置文件中: proxy_set_header  Host $host; proxy_set_header  X-Real-IP $rem

实验:基于nginx反向代理的lnamp搭建WordPress,并实现动静分离

一.实验环境: 1.各软件版本: 系统版本:CentOS Linux release 7.4.1708 (Core) php版本:PHP 7.2 nginx版本:nginx-1.12.2 数据库版本:MariaDB 10 WordPress版本:4.9.4 关闭防火墙与selinux 2.实验架构及IP分配: nginx反向代理一台: IP:192.168.1.105 10.66.16.111安装nginx nginx WEB服务器一台 IP:10.66.16.11 安装nginx Apache

Nginx反向代理后端多个Tomcat、Nginx+PHP服务器(Nginx的代理和负载功能)

需求分析: 现有3个二级域名,一个IP地址,要实现将这3个域名通过1个IP地址对外提供web服务,可使用IP+端口的方式对域名进行解析,且互不影响.如: Domain1:www.huangming.org     IPADDR:192.168.1.33:80 Domain2:web1.huangming.org    IPADDR:192.168.1.33:8080 Domain3:web2.huangming.org    IPADDR:192.168.1.33:8080 其中Domain1作

简单测试nginx反向代理和负载均衡功能的操作记录(2)-----https代理

背景:A服务器(192.168.1.8)作为nginx代理服务器B服务器(192.168.1.150)作为后端真实服务器 现在需要访问https://testwww.huanqiu.com请求时从A服务器上反向代理到B服务器上 这就涉及到nginx反向代理https请求的配置了~~~ ------------------------------------------------------------------------------------A服务器(192.168.1.8)上的操作流程

nginx的反向代理功能具体示例

实验拓扑图:现在我们要求nginx为后端的三台服务器提供反向代理功能:其中图片服务器单独定义为一个location作为调度,要求配置缓存功能,另外两台web服务器组成负载均衡模式,一主一备,并作健康状态检查,同时在web服务器上配置日志功能,记录真实的客户端ip地址. 首先我们来准备实验的基础环境: 反向代理服务器两台网卡分别连接互联网以及跟后端的upstream server通信 反向代理服务器端配置: yum install -y nginx //安装nginx服务 systemctl st