通过Nginx给web服务增加登录验证

通过Nginx给web服务增加登录验证
阶段关键任务说明/避坑要点
1. 准备项目目录创建清晰的文件结构避免权限和路径错误的基础。
2. 配置认证文件创建.htpasswd密码文件确保密码文件格式正确,并注意在图形界面中正确设置文件权限。
3. 编写Docker Compose文件定义服务、网络、挂载卷这是核心配置文件,确保语法和缩进正确。
4. 配置Nginx编写nginx.conf和服务器配置正确设置上游服务、认证、文件大小限制。
5. 飞牛NAS部署在图形界面创建Compose项目确保选择正确的项目路径和Compose文件。
6. 验证与测试检查容器状态、测试访问和上传通过日志排查问题,确保各项功能正常。

第一步:准备项目结构与文件

在飞牛NAS上创建一个独立的项目目录,例如 nginx_gateway。推荐的文件结构如下,这有助于清晰管理配置:

/nginx_gateway/
├── docker-compose.yml       # Docker Compose 编排文件
├── nginx/
│   ├── nginx.conf           # Nginx 主配置文件
│   └── conf.d/              # (可选) 可用于存放其他配置片段
── auth/      └── .htpasswd            # 存储用户名和密码的认证文件

🔐 第二步:配置认证文件

  1. 生成 .htpasswd 文件:使用 在线htpasswd工具。输入用户名为和秘密,点击生成,生成的结果复制到文本里,把文本重命名为:.htpasswd
  1. 设置文件权限(关键!):设置 auth文件夹权限,确保文件所有者有读写权限,或直接设置为 101:101(Nginx容器内常用的用户ID和组ID),以避免Nginx进程无权限读取密码文件。

连接到飞牛NAS的SSH:使用如Terminal(macOS/Linux)或PuTTY(Windows)等工具,通过管理员账户SSH登录到你的飞牛NAS。地址是你的NAS IP,端口通常是22。

导航到项目目录:使用 cd命令进入你存放 auth文件夹的路径。例如:

cd /path/to/your/nginx_gateway

递归修改所有者:执行以下命令,将auth目录及其内部所有文件的所有者和组都改为UID 101和GID 101:

sudo chown -R 101:101 auth/

递归修改文件权限:执行以下命令,确保权限正确:

sudo chmod -R 755 auth/

🐳 第三步:编写 Docker Compose 文件

以下是 docker-compose.yml文件的内容


services:
  nginx-gateway:
    image: nginx:latest
    container_name: nginx-gateway
    ports:
      - "8080:80"  # 将NAS的8080端口映射到Nginx容器的80端口
    volumes:
      # 挂载Nginx配置文件
      - /vol1/1000/docker/nginx_gateway/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
      # 挂载认证文件
      - /vol1/1000/docker/nginx_gateway/auth/.htpasswd:/etc/nginx/auth/.htpasswd:ro

    network_mode: bridge
    restart: unless-stopped  # 容器异常退出时自动重启

重要提示

  • 挂载卷的路径(如 /vol1/1000/docker/nginx_gateway)需要替换为你在飞牛NAS上的实际绝对路径

⚙️ 第四步:配置 Nginx

创建 nginx/nginx.conf文件,以下是核心配置,它解决了代理设置、认证、文件上传大小限制问题

user  nginx;
events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    # 设置客户端最大请求体大小,解决大文件上传问题
    client_max_body_size 20M;

    # 定义上游服务器(你的朋友圈应用)
    upstream moments_app {
        server moments:3000; # 使用Docker Compose服务名"moments"进行内部通信
    }

    server {
        listen 80;
        server_name localhost;

        # 启用基础认证
        auth_basic "Restricted Content";
        auth_basic_user_file /etc/nginx/auth/.htpasswd;

        location / {
            # 代理到朋友圈应用
            proxy_pass http://moments_app; # 请根据实际情况修改容器名和端口
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
}

🚀 第五步:在飞牛NAS上部署

  1. 1.1.打开飞牛NAS的Docker管理界面。
  2. 2.2.进入 Compose​ 标签页,点击 新增项目
  3. 3.3.填写项目名称(如 nginx_gateway)。
  4. 4.4.在“路径”中选择你创建的项目根目录(nginx_gateway)。
  5. 5.5.在“来源”部分,选择“上传docker-compose.yml”,然后选择你编辑好的 docker-compose.yml文件。
  6. 6.6.确认勾选“创建后立即启动”,然后点击“确定”。飞牛NAS将自动拉取镜像并启动容器。

✅ 第六步:验证与测试

部署完成后,进行以下检查以确保一切正常:

  1. 1.1.检查容器状态:在飞牛NAS的Docker管理界面,查看两个容器的状态是否为“已启动”。
  2. 2.2.测试认证:在浏览器访问 http://你的飞牛NAS的IP:8080。应该会弹出登录框,输入正确的用户名和密码后才能看到朋友圈内容。
  3. 3.3.测试图片上传:成功登录后,尝试上传一张图片,确认功能正常。
  4. 4.4.查看日志:如果遇到问题,首先查看容器日志。在飞牛Docker界面点击容器名称,进入“日志”标签页,查看Nginx和朋友圈应用的错误信息。

Comments

No comments yet. Why don’t you start the discussion?

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注