本文最后更新于 2025-06-17,文章内容可能已经过时。

端口基础概念:网络通信的“门牌号”

在互联网通信中,端口(Port)是设备间传输数据的逻辑通道,类似实体房屋的门牌号。

  • 80端口:HTTP协议默认端口,用于未加密的网页数据传输(如文本、图片)。

  • 443端口:HTTPS协议标准端口,通过SSL/TLS加密保障数据安全。

握手流程对比

  • 端口 80(HTTP):直接建立 TCP 连接 → 发送请求 → 接收响应 → 关闭连接。

  • 端口 443(HTTPS):建立 TCP 连接 → TLS 握手(证书交换、密钥协商)→ 加密通道内发送 HTTP 请求/响应 → 关闭连接。

常见使用场景

  • 开发调试:本地或内网调试常用 HTTP(80端口),方便快速部署。

  • 生产环境:所有面向公网、涉及用户数据或 SEO 排名的页面均推荐使用 HTTPS(443端口)。

群晖NAS注意事项

影响范围:

  • 80/443端口可能被群晖DSM管理界面、Web Station或Docker容器使用,修改前需确认无依赖服务。

  • 若仅需释放端口给其他应用(如自建Web服务),建议改用非标准端口(如8080、8443)。

安全风险:

  • 关闭443端口会禁用HTTPS访问,若需保留加密通信,切勿删除443监听,可配置反向代理或证书迁移。

操作建议:

  • 生产环境谨慎操作:80/443是标准Web端口,关闭可能影响外部访问。

  • 优先使用反向代理:通过Nginx将流量转发到其他端口,而非直接关闭监听。

  • 备份配置文件:修改前执行下面的命令进行备份

    #  完整备份 /usr/syno/share/nginx/ 保留文件权限并递归复制所有子目录并添加备份的日期
    # 将文件夹备份到群晖的/volume1/docker/内
    # 如果你的docker不是安装在/volume1,那就把1改成你对应的存储空间号。
    
    sudo cp -rp /usr/syno/share/nginx /volume1/docker/nginx_backup_$(date +%Y%m%d)

禁用Web Station的默认监听(推荐)

  1. 打开群晖的SSH功能,使用终端软件进行连接,并切换到root状态下。
    DSM open SSH.png

  2. 进入群晖的Nginx文件夹(可选)

    cd /usr/syno/share/nginx/
  3. 备份配置文件:修改前执行下面的命令进行备份

    # 完整备份 /usr/syno/share/nginx/ 保留文件权限并递归复制所有子目录并添加备份的日期
    # 将文件夹备份到群晖的/volume1/docker/内
    # 如果你的docker不是安装在/volume1,那就把1改成你对应的存储空间号。
    
    sudo cp -rp /usr/syno/share/nginx /volume1/docker/nginx_backup_$(date +%Y%m%d)
  4. 群晖DSM通过以下模板动态生成Nginx配置,需修改对应文件:

    DSM管理界面配置——定义80/5000/5001端口监听——文件路径:/usr/syno/share/nginx/DSM.mustache
    
    Web Station服务配置——直接定义80/443默认监听——文件路径:/usr/syno/share/nginx/WWWService.mustache
    
    通用服务模板——可选端口配置——文件路径:/usr/syno/share/nginx/server.mustache
  5. 编辑Web Station服务配置文件

    vi /usr/syno/share/nginx/WWWService.mustache
  6. 按字母i键进入编辑模式,修改配置文件,按Esc键退出编辑模式,输入:wq!强制保存并退出。
    (排版太挤的就先粘贴到文本文件内,修改后再使用,灵活应变。)

    # 下面是黑群晖DSM7.2.2 SA6400型号的默认Web Station服务配置(DSM7.*通用)
    
    server {
        listen 80 default_server;    # IPv4监听80端口(SSL加密)--将80端口改成其他未被占用的空闲端口
        listen [::]:80 default_server;    # IPv6监听80端口(SSL加密)--将80端口改成其他未被占用的空闲端口
    
        server_name _;
        gzip on;
    
        {{> /usr/syno/share/nginx/WWW_Main}}
    }
    
    server {
        listen 443 default_server ssl;    # IPv4监听443端口(SSL加密)--将443端口改成其他未被占用的空闲端口
        listen [::]:443 default_server ssl;    # IPv6监听443端口(SSL加密)--将443端口改成其他未被占用的空闲端口
        server_name _;
    
        {{#DSM.https.compression}}
        gzip on;
        {{/DSM.https.compression}}
    
        {{> /usr/syno/share/nginx/WWW_Main}}
    }
    
    {{#DSM.synorelay}}
    server {
        listen 80;
        listen [::]:80;
    
        server_name {{ddns}};
        set $fqdn $server_name;
    
        gzip on;
    
        {{> /usr/syno/share/nginx/WWW_Main}}
    }
    
    server {
        listen 443 ssl;
        listen [::]:443 ssl;
    
        server_name {{ddns}};
        set $fqdn $server_name;
    
        {{#DSM.https.compression}}
        gzip on;
        {{/DSM.https.compression}}
    
        {{#https}}
        {{> /usr/syno/share/nginx/https.mustache}}
        {{/https}}
    
        {{> /usr/syno/share/nginx/WWW_Main}}
    }
    {{/DSM.synorelay}}
    
  7. 重新启动系统Nginx服务(群晖页面会重新加载)

    sudo systemctl restart nginx
  8. 确认80/443端口是否已释放(正常应该是执行后无任何输出)

    sudo netstat | grep -E ':80|:443'
  9. 记录一下正常的情况

    root@DSM:/usr/syno/share/nginx# sudo netstat | grep -E ':80|:443'
    root@DSM:/usr/syno/share/nginx# 
  10. 然后你在浏览器内直接输入群晖的IP地址就没有任何的反映了,需要输入完整的地址+端口才能访问。

文末

👇👇👇