You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动