Nginx正向代理

文章介绍了Nginx正向代理的原理和配置方法,通过正向代理可以让内网机器通过外网机器访问Internet。配置包括在Nginx配置文件中添加代理规则,使用`proxy_pass`指令,以及通过`resolver`设置DNS解析。此外,还涉及了使用systemd启动Nginx服务,以及通过firewall-cmd调整防火墙规则以允许特定IP和端口的访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;

其中,代理服务器的协议为HTTPhttp_hostrequest_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选项将新规则永久保存到防火墙配置中,否则会在下次重启后失效。

### Nginx 正向代理的配置方法 Nginx 可以通过特定的配置实现正向代理功能。以下是详细的配置说明以及示例: #### 配置核心要点 为了使 Nginx 实现正向代理,需要设置 `resolver` 指令来指定 DNS 服务器地址,并使用 `$http_host` 和 `$request_uri` 动态解析目标主机和请求路径[^3]。 #### 示例配置 以下是一个典型的 Nginx 正向代理配置示例: ```nginx server { resolver 114.114.114.114 ipv6=off; # 指定DNS服务器并禁用IPv6支持 listen 8080; # 设置监听端口 location / { proxy_pass http://$http_host$request_uri; # 将请求转发到目标服务器 proxy_set_header Host $host; # 转发Host头信息 proxy_set_header X-Real-IP $remote_addr; # 添加客户端真实IP proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } ``` 此配置中,`resolver` 指定了用于域名解析的 DNS 服务器 IP 地址,而 `proxy_pass` 使用动态变量 `$http_host` 和 `$request_uri` 来构建完整的请求 URL[^3]。 #### 启动服务 完成配置文件编辑后,需重新加载 Nginx 配置以应用更改。可以通过以下命令重启或重载 Nginx: ```bash sudo nginx -s reload ``` 如果是在 Windows 平台上运行,则可以直接启动 Nginx 的可执行程序[^2]: ```plaintext 点击 nginx.exe 启动 ``` --- ### 注意事项 1. **权限问题**:某些操作系统可能需要管理员权限才能绑定低编号端口(如 80 或 443)。建议使用高编号端口(如 8080)测试配置。 2. **防火墙规则**:确保服务器上的防火墙允许外部访问所配置的端口。 3. **日志排查**:遇到问题时,可通过查看 Nginx 错误日志定位原因。错误日志通常位于 `/var/log/nginx/error.log` 中。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值