Nginx-正向代理
正向代理和反向代理的区别
理解这两种方式下我们要让服务器扮演什么样的角色
- 正向代理:充当客户端的角色(常见的翻墙VPN就是正向代理),目的是访问外网的资源
- 反向代理:充当站点的角色,目的是把站点的资源发布出去让其他客户端能够访问。
Nginx 正向代理服务
Nginx做正向代理相比反向代理的使用场景要少一些。如果要把局域网外的Internet想象成一个巨大的资源库,则局域网中的客户端要访问Internet,则需要通过代理服务器来进行访问,这种代理方式就是我们说的正向代理
。
应用场景
现在有一台内网机器10.212.4.35
处于办公内网中,无法访问外部Internet
。现在有一台外网机器10.211.1.6
处于另一个网络环境中,可以正常访问Internet
。如果我们想在内网访问Internet
,比如让10.212.4.35
的主机可以访问10.211.1.6
机器的8080
端口,就需要使用Nginx配置正向代理服务。
配置正向代理的步骤
# 配置Nginx
cd /usr/local/nginx/conf
cp nginx.conf{,.bak}
vim nginx.conf
在server
块中添加如下配置:
server{
listen 80;
server_name localhost;
resolver 114.114.114.114;
proxy_connect;
proxy_connect_allow 443 80;
proxy_connect_connect_timeout 10s;
proxy_connect_read_timeout 10s;
proxy_connect_send_timeout 10s;
location / {
proxy_pass $scheme://$http_host$request_uri;
}
}
补充说明:resolver指令
该指令指定DNS
服务器的IP
地址。DNS服务器的主要功能是进行域名解析,将域名映射为对应的IP地址。语法结构如下:
resolver address ...[valid=time]
- address: DNS服务器的IP地址;如果不指定端口,默认使用53。
- time:设置数据包在网络中的有效时间。
使用示例如以下代码所示:
resolver 127.0.0.1 [::1]:5353 valid=30s;
在实际使用中,也不需要这么复杂,只需要将DNS服务器的IP地址设置好即可。
proxy_pass指令
该指令用于设置代理服务器的协议和地址,它不仅仅用于Nginx服务器的正向代理,更多地应用于反向代理。使用的语法结构是:proxy_pass URL;
- URL:要设置的正向代理服务器的协议和地址。
该指令的用法相对固定:
proxy_pass http://$http_host$request_uri;
其中,代理服务器的协议为HTTP
,http_host
和request_uri
分别用于自动获取主机和URI。
编写systemd
启动脚本
cat > /etc/systemd/system/nginx.service << EOF
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPTD
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
启动Nginx
systemctl daemon-reload
systemctl start nginx
开启防火墙策略
这里是通过网闸出来的,所以源
IP
发生了改变变为了172.12.0.179
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="172.12.0.179" port protocol="tcp" port="8080" accept"
firewall-cmd reload
用curl命令进行验证
http的访问测试
curl -I --proxy 172.11.0.179:8080 http://www.baidu.com
https的访问测试
curl -I --proxy 172.11.0.179:8080 https://www.baidu.com
添加到环境变量,直接使用
vim /etc/profile
export http_proxy=172.11.0.179:8080
export https_proxy=172.11.0.179:8080
添加完毕之后,就可以直接上网了
curl -I http://www.baidu.com
curl -I https://www.baidu.com
Linux防火墙相关命令
firewall-cmd
是CentOS/RHEL 7及以上版本中的防火墙管理命令,用于配置和管理系统的防火墙规则,以下是一些常见使用方法:
1.查看防火墙状态
firewall-cmd --state
2.开启防护墙
systemctl start firewalld
3.关闭防火墙
systemctl stop firewalld
4.重新加载防火墙规则
firewall-cmd --reload
5.查看防火墙规则
firewall-cmd --list-all
6.开启特定的端口进入连接
firewall-cmd --zone=public --add-port=端口号/tcp --permanent
7.移除特定端口的进入连接:
firewall-cmd --zone=public --remove-port=端口号/tcp --permanent
8.开启特定服务的进入连接
firewall-cmd --zone=public --add-service=服务名 --permanent
9.移除特定发服务进入连接
firewall-cmd --zone=public --remove-service=服务名 --permanent
10.允许特定IP地址的进入连接:
firewall-cmd --zone=public --add-source=IP地址 --permanent
11.拒绝特定的IP地址进入连接
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="IP地址" reject' --permanent
需要注意的是,firewall-cmd命令需要以root用户或具有sudo权限的用户身份运行,否则会报错。另外,使用–permanent选项将新规则永久保存到防火墙配置中,否则会在下次重启后失效。