OpenWRT路由器配置NGINX HTTP代理服务器及替代方案求助
OpenWRT路由器配置NGINX HTTP代理服务器及替代方案求助
嗨,我来帮你搞定这个问题!既然你OpenWRT内存不够装Squid,用NGINX做HTTP/HTTPS代理完全可行,而且配置起来也不算复杂,另外还有更轻量的替代方案可以选,下面咱们一步步来:
一、NGINX HTTP/HTTPS代理配置步骤
1. 安装必要工具
先在OpenWRT上安装NGINX和生成认证密码的工具:
opkg update && opkg install nginx apache2-utils
apache2-utils包包含了htpasswd,用来生成账号密码文件。
2. 创建认证密码文件
执行下面的命令生成密码文件,替换your_username为你要设置的用户名,执行后输入对应的密码即可:
htpasswd -c /etc/nginx/.htpasswd your_username
如果要添加多个用户,第二次执行时去掉-c参数,避免覆盖已有的文件。
3. 配置NGINX代理规则
新建一个代理专用的配置文件(避免修改默认配置导致冲突):
vi /etc/nginx/conf.d/proxy.conf
把下面的内容粘贴进去,记得替换X.X.X.X为你的远程客户端公网IP,8080换成你想要的端口:
server { # 监听自定义端口 listen 8080; # 仅允许指定IP访问,大幅降低安全风险 allow X.X.X.X; deny all; # 开启账号密码认证,提示语可以自定义 auth_basic "Home Proxy Access"; auth_basic_user_file /etc/nginx/.htpasswd; # 处理普通HTTP请求的转发逻辑 location / { proxy_pass http://$http_host$request_uri; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } # 处理HTTPS的CONNECT请求,实现HTTPS代理功能 proxy_connect; proxy_connect_allow 443 563; # 允许常用加密端口,可按需添加其他端口 proxy_connect_connect_timeout 10s; proxy_connect_read_timeout 10s; proxy_connect_send_timeout 10s; }
注意:如果你的OpenWRT版本里NGINX默认没有
proxy_connect模块,尝试安装nginx-mod-http-proxy-connect包,要是还是不行,直接换后面的TinyProxy方案更省心。
4. 重启NGINX并验证
配置完后重启NGINX生效:
/etc/init.d/nginx restart
在远程客户端上用curl测试是否生效,替换对应的账号、密码、公网IP和端口:
curl -x http://your_username:your_password@Y.Y.Y.Y:8080 http://icanhazip.com
如果返回你家的公网IP Y.Y.Y.Y,说明配置成功。
5. 开放防火墙端口
最后要在OpenWRT防火墙里开放代理端口,允许外网访问:
# 添加防火墙规则 uci add firewall rule uci set firewall.@rule[-1].src=wan uci set firewall.@rule[-1].dest_port=8080 uci set firewall.@rule[-1].proto=tcp uci set firewall.@rule[-1].target=ACCEPT uci set firewall.@rule[-1].name="Home Proxy Port" # 保存并重启防火墙 uci commit firewall /etc/init.d/firewall restart
二、轻量替代方案:TinyProxy
如果NGINX的模块问题不好解决,TinyProxy是更适合低内存设备的轻量代理,资源占用比Squid小很多,配置也更简单:
1. 安装TinyProxy
opkg update && opkg install tinyproxy
2. 配置TinyProxy
编辑配置文件:
vi /etc/tinyproxy.conf
修改几个关键参数:
Port 8080:替换成你想要的代理端口Allow X.X.X.X:添加你的远程客户端公网IP,注释掉其他默认的Allow行- 在文件末尾添加认证:
BasicAuth your_username your_password
3. 重启并验证
/etc/init.d/tinyproxy restart
防火墙配置和NGINX步骤一致,开放对应端口即可,测试方式也和之前的curl命令相同。
三、安全提醒
虽然你已经知道安全风险,但还是再啰嗦几点:
- 绝对不要把代理开放给所有IP,严格限制
Allow的IP范围 - 定期更换认证密码,避免使用弱密码
- 可以开启日志监控,比如NGINX的
/var/log/nginx/access.log、TinyProxy的/var/log/tinyproxy/tinyproxy.log,随时查看异常访问 - 优先通过你已配置的VPN使用家里的网络,客户端连VPN后直接设置代理为路由器内网IP即可,不需要暴露公网端口,安全系数高很多
备注:内容来源于stack exchange,提问作者giov




