You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 22.04服务器指定端口应用的HTTP认证保护及部署免凭证配置方案咨询

Ubuntu 22.04服务器指定端口应用的HTTP认证保护及部署免凭证配置方案咨询

嘿,这个需求用Nginx反向代理来实现是最稳妥、最易维护的方案,既能给指定端口的应用加上HTTP认证,又能轻松搞定部署时的免凭证访问,我给你一步步拆解具体操作:

一、先装Nginx和密码管理工具

首先咱们得把Nginx装上,Ubuntu 22.04的默认软件源里就有,直接跑命令:

sudo apt update && sudo apt install nginx

然后需要用到htpasswd来生成HTTP认证的密码文件,这个工具在apache2-utils包里,一起装上:

sudo apt install apache2-utils

二、创建HTTP认证的用户密码文件

咱们把密码文件放在Nginx的配置目录下,比如/etc/nginx/.htpasswd,创建第一个用户(比如叫admin)的命令是:

sudo htpasswd -c /etc/nginx/.htpasswd admin

执行后会提示你输入并确认密码。如果之后要加更多用户,去掉-c参数就行,不然会覆盖原有文件:

sudo htpasswd /etc/nginx/.htpasswd another_user

三、配置Nginx反向代理(核心步骤)

咱们新建一个Nginx配置文件来管理这两个需要认证的应用,比如/etc/nginx/sites-available/app-auth.conf,把下面的内容填进去,记得替换里面的部署IP或者按需调整:

# 处理4000端口的应用
server {
    listen 4000;
    server_name 1.2.3.4;

    location / {
        # 反向代理到实际运行的应用(这里假设应用改绑到本地127.0.0.1了,后面会说原因)
        proxy_pass http://127.0.0.1:4000;
        # 传递必要的请求头,保证应用能正常获取客户端信息
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        # 关键:允许指定IP免认证,其他IP必须走HTTP认证
        satisfy any;
        allow 192.168.1.100; # 替换成你部署机器的公网/内网IP
        allow 127.0.0.1;     # 如果部署是在服务器本地执行,加上这个
        deny all;
        # 认证提示信息和密码文件路径
        auth_basic "Restricted Application Access";
        auth_basic_user_file /etc/nginx/.htpasswd;
    }
}

# 处理5000端口的应用,配置和上面基本一致
server {
    listen 5000;
    server_name 1.2.3.4;

    location / {
        proxy_pass http://127.0.0.1:5000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        satisfy any;
        allow 192.168.1.100;
        allow 127.0.0.1;
        deny all;
        auth_basic "Restricted Application Access";
        auth_basic_user_file /etc/nginx/.htpasswd;
    }
}

这里解释下satisfy any的作用:只要满足“IP在允许列表里”或者“通过HTTP认证”其中一个条件,就能访问应用,完美解决部署免凭证的需求。

四、调整原有应用的监听地址(重要)

原来你的应用是监听1.2.3.4:4000/5000,现在咱们让它们改绑到127.0.0.1(也就是服务器本地),这样外部请求必须经过Nginx才能访问应用,避免绕过认证直接访问。具体怎么改要看你的应用类型:

  • 比如Node.js/Express应用,启动时把监听地址改成127.0.0.1而不是0.0.0.0或者1.2.3.4
  • Python/Flask应用,启动命令里加--host=127.0.0.1
  • 其他应用同理,找到配置里的监听地址设置,改成仅本地访问

五、启用配置并验证

先把新建的配置文件软链接到Nginx的启用目录:

sudo ln -s /etc/nginx/sites-available/app-auth.conf /etc/nginx/sites-enabled/

然后测试配置有没有语法错误:

sudo nginx -t

如果输出test is successful,就重启Nginx生效:

sudo systemctl restart nginx

备选方案:直接在应用中添加认证(不推荐)

如果不想用Nginx,也可以在应用代码里加HTTP认证,但不同语言/framework的实现方式不一样,比如:

  • Node.js/Express用basic-auth中间件
  • Python/Flask用flask-basicauth库
    这种方式的缺点是每个应用都要单独配置,而且部署免凭证需要在应用里加IP判断逻辑,不如Nginx统一管理方便,所以还是优先推荐反向代理方案。

备注:内容来源于stack exchange,提问作者user984621

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 11:09:37