Nginx实现反向代理

相关概念

反向代理:在收到客户端请求之后,会修目标IP地址和端口

正向代理:在收到客户端请求之后,会修源IP地址和端口

上游服务器:代理服务器后端的哪些真正给客户端提供服务的节点,这样的服务器称之为上游服务器

下游服务器:客户端就是下游节点

模块:nginx_http_proxy_module

指令:

proxy_pass:指定上游服务器的ip和端口

proxy_set_header:指定在重新封装请求报文的时候,添加一个新的首部

部署步骤

1、检查环境

getenforce #查看selinux运行状态 setenforce 0 #临时关闭selinuxselinux 开机不自启的配置如下: 执行:vi /etc/selinux/config将SELINUX=xxxx 修改为SELINUX=disabled systemctl status firewalld #检查firewalld是否启动,未启动需执行:systemctl start firewalld;已启动请忽略 systemctl enable firewalld #做开机启动

2、安装服务

yum -y install nginx httpd php #安装nginx httpd php三个服务

3、配置httpd端口

vim /etc/httpd/conf/httpd.conf ########### Listen 85 #默认80,这里为了不和nginx冲突,需另起一个 ###########

4、启动httpd

systemctl start httpd systemctl enable httpd netstat -anp|grep httpd

5、修改Nginx配置文件

vim /etc/nginx/nginx.conf ######## 删除默认的80端口server#切记最后需要加一个}。 ############### cd /etc/nginx/conf.d vim pass.conf #新建并编辑一个conf文件 ########### server { listen80; location / { proxy_pass :85; } } ###########

6、启动nginx

nginx –t #必要步骤,错误检验,无问题可做下一步 systemctl restart nginx #重启nginx systemctl enable nginx #设置nginx开机自启动 netstat -anp|grep nginx #查看nginx端口是否存活 firewall-cmd --add-port=80/tcp #防火墙开放80端口 firewall-cmd --add-port=80/tcp --permanent #设置防火墙上开放的80端口永久生效

7、浏览器验证

IP:80

8、验证php

echo "<?php phpinfo(); ?>" > /var/www/html/index.php #比较简单的测试页输入

9、浏览器验证

IP:端口

10、配置nginx网站

mkdir /nginx #新建目录 echo "奔跑的乌拉拉" > /nginx/index.html #输入一个html

vim /etc/nginx/conf.d/pass.conf ################### server { listen80; location ~* \.php$ { #注意这里的改变 proxy_pass :85; } location / { root /nginx; } } ################

11、重启nginx

nginx –t #必要步骤,错误检验 systemctl restart nginx #重启nginx服务

12、浏览器验证

IP/index.html IP/index.php

最后补充

补充一:

location如下:

location /admin { proxy_pass ; proxy_pass ; }

请求的url 是http://www.test.com/admin/a.html

如果代理方式是 proxy_pass http://www.test.com/; 那么去http://www.test.com的根目录下找a.html,/代表完全代理。

如果代理方式是 proxy_pass http://www.test.com; 那么去http://www.test.com的根目录下的admin找a.html

补充二:

如果location中使用了模式匹配(正则),那么,location中的url会直接补充到代理节点的后面.

此时,上游服务器的的后面不能有任何内容,包括 /

location ~ \.php$ { proxy_pass ; [正则表达式proxy_pass转发的地址后面什么都不能加] <<< 正确写法 proxy_pass :80; <<< 正确写法 proxy_pass ; <<< 错误写法 proxy_pass img;<<< 错误写法 }

此时,如果请求的url是 http://www.baidu.com/book/stu/a.php ,就会代理成 http://www.test.com/book/stu/a.php

补充三:

在location中如果有重定向的话,那么就用重定向后的uri替换掉代理节点中的uri

location / { rewrite /(.*)$ /index.php?name=$1 break; proxy_pass :80/img; }

此时,如果请求的url是 http://www.test.com/bajie ,就会代理成 http://www.baidu.com/index.php?name=bajie

知道更多,请关注:Linux学习的那些事儿,带你了解更多知识哦~