Nginx实现反向代理

58人浏览 / 0人评论
点击上面蓝字“ 关注我们 ”吧


相关概念

反向代理:在收到客户端请求之后,会修目标 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=disabledsystemctl 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.dvim pass.conf       #新建并编辑一个conf文件########### server {     listen      80;     location / {       proxy_pass   http://127.0.0.1:85;     }}###########

6 、启动 nginx
nginx –t       #必要步骤,错误检验,无问题可做下一步systemctl restart nginx       #重启nginxsystemctl 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 "" > /var/www/html/index.php              #比较简单的测试页输入

9 、浏览器验证
IP:端口

10 、配置 nginx 网站
mkdir /nginx       #新建目录echo "奔跑的乌拉拉" > /nginx/index.html       #输入一个html

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

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

12 、浏览器验证
IP/index.htmlIP/index.php


最后补充

补充一:
location如下:   
location /admin {            proxy_pass http://www.test.com/;            proxy_pass http://www.test.com;          }
请求的url 是http://www.test.com/admin/a.html
如果代理方式是 proxy_pass http://www.test.com/; 那么去www.test.com的根目录下找a.html,/代表完全代理。
如果代理方式是 proxy_pass http://www.test.com; 那么去www.test.com的根目录下的admin找a.html

补充二:
如果location中使用了模式匹配(正则),那么,location中的url会直接补充到代理节点的后面.
    此时,上游服务器的的后面不能有任何内容,包括 /
       
location ~ \.php$ {            proxy_pass http://www.test.com; [正则表达式proxy_pass转发的地址后面什么都不能加]       <<< 正确写法            proxy_pass http://www.test.com:80;     <<< 正确写法            proxy_pass http://www.test.com/;       <<< 错误写法            proxy_pass http://www.test.com/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 http://www.baidu.com:80/img;        }
    此时,如果请求的url是 http://www.test.com/bajie ,就会代理成 www.baidu.com/index.php?name=bajie


一个会购物,能赚钱的公众号

全部评论