当前位置: 首页 > news >正文

25-deepin-linux-wsl-nginx-installation

在 Deepin Linux 和 WSL 环境中安装配置 Nginx 静态资源服务器

概述

本文详细介绍了在 Deepin Linux 和 WSL (Windows Subsystem for Linux) 环境中安装 Nginx 并配置静态资源服务器的完整过程,包括常见问题的排查和解决方案。

一、在 Deepin Linux 上安装 Nginx

1.1 更新系统包列表

sudo apt update

1.2 安装 Nginx

sudo apt install nginx -y

1.3 验证安装

nginx -v

二、配置 Nginx 静态资源服务

2.1 创建静态资源目录

sudo mkdir -p /home/swg/static
sudo chmod 755 /home/swg/static
sudo chown -R www-data:www-data /home/swg/static

2.2 创建 Nginx 配置文件

sudo nano /etc/nginx/sites-available/static_server

配置文件内容:

server {listen 10001;server_name _;root /home/swg/static;index index.html index.htm;location / {try_files $uri $uri/ =404;}location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {expires 7d;add_header Cache-Control "public, max-age=604800";}location ~ /\. {deny all;}
}

2.3 启用站点配置

sudo ln -s /etc/nginx/sites-available/static_server /etc/nginx/sites-enabled/
sudo rm -f /etc/nginx/sites-enabled/default

2.4 测试并启动 Nginx

sudo nginx -t
sudo systemctl start nginx
sudo systemctl enable nginx

三、WSL 环境中的特殊配置

3.1 检查 WSL 网络配置

ip addr show eth0
hostname -I

3.2 Windows 端口转发

在 Windows PowerShell(以管理员身份运行)中:

netsh interface portproxy add v4tov4 listenport=10001 listenaddress=0.0.0.0 connectport=10001 connectaddress=$(wsl hostname -I)

3.3 Windows 防火墙配置

New-NetFirewallRule -DisplayName "WSL Nginx Port 10001" -Direction Inbound -LocalPort 10001 -Protocol TCP -Action Allow

四、常见问题排查

4.1 端口未监听问题

检查端口监听状态:

sudo netstat -tulpn | grep :10001

如果端口未监听,可能的原因和解决方案:

  1. Nginx 服务未启动

    sudo systemctl status nginx
    sudo systemctl start nginx
    
  2. 配置文件错误

    sudo nginx -t
    
  3. 权限问题

    sudo chown -R www-data:www-data /home/swg/static
    

4.4 Nginx 权限拒绝问题详解

当遇到以下错误时:

2025/10/19 16:51:07 [error] 4153#4153: *1 open() "/home/swg/static/index.html" failed (13: Permission denied), client: 127.0.0.1, server: _, request: "GET /index.html HTTP/1.1", host: "localhost:10001"

问题分析

这是典型的 Nginx 权限问题,错误代码 13 表示 Permission Denied。可能的原因包括:

  1. 文件或目录权限不正确
  2. 目录所有权问题
  3. SELinux 或 AppArmor 限制
  4. Nginx 运行用户无访问权限

诊断步骤

  1. 检查当前权限和所有权

    # 检查目录和文件权限
    ls -la /home/swg/static/# 检查 Nginx 运行用户
    ps aux | grep nginx
    
  2. 检查目录路径权限

    # 检查整个路径的权限
    namei -om /home/swg/static/index.html
    

解决方案

  1. 修复文件/目录权限

    # 确保目录有正确的执行权限
    sudo chmod 755 /home/swg
    sudo chmod 755 /home/swg/static# 确保文件有正确的读取权限
    sudo chmod 644 /home/swg/static/*.html
    sudo chmod 644 /home/swg/static/*.ico
    
  2. 修复目录所有权

    # 将目录所有权改为 Nginx 运行用户
    sudo chown -R www-data:www-data /home/swg/static
    # 或者如果 Nginx 以 nginx 用户运行
    sudo chown -R nginx:nginx /home/swg/static
    
  3. SELinux 问题处理(如果启用)

    # 检查 SELinux 状态
    sestatus# 如果启用,设置正确的 SELinux 上下文
    sudo setsebool -P httpd_can_network_connect 1
    sudo semanage fcontext -a -t httpd_sys_content_t "/home/swg/static(/.*)?"
    sudo restorecon -R /home/swg/static
    
  4. AppArmor 问题处理(如果启用)

    # 检查 AppArmor 状态
    sudo apparmor_status# 如果 Nginx 配置文件受限,可以禁用或修改配置
    sudo aa-complain /etc/apparmor.d/usr.sbin.nginx
    
  5. Nginx 用户组权限

    # 将 Nginx 用户添加到目录所有者组
    sudo usermod -a -G swg www-data
    # 或者
    sudo usermod -a -G swg nginx
    

预防措施

  1. 创建目录时设置正确权限

    sudo mkdir -p /home/swg/static
    sudo chmod 755 /home/swg/static
    sudo chown -R www-data:www-data /home/swg/static
    
  2. 使用 ACL(访问控制列表)进行精细权限控制

    # 为 Nginx 用户添加特定权限
    sudo setfacl -R -m u:www-data:rwx /home/swg/static
    sudo setfacl -R -m d:u:www-data:rwx /home/swg/static
    
  3. 定期检查权限设置

    # 创建脚本定期检查权限
    echo '#!/bin/bash
    find /home/swg/static -type f ! -perm 644 -exec chmod 644 {} \;
    find /home/swg/static -type d ! -perm 755 -exec chmod 755 {} \;' > /usr/local/bin/check-nginx-permissions
    chmod +x /usr/local/bin/check-nginx-permissions
    

故障排查流程图

flowchart TDA[Nginx 权限错误] --> B{检查文件权限}B -->|权限不足| C[修复文件/目录权限]B -->|权限正常| D{检查 SELinux/AppArmor}D -->|安全模块启用| E[设置安全上下文]D -->|安全模块禁用| F{检查 Nginx 运行用户}F -->|用户无访问权| G[修改用户组或所有权]F -->|用户有访问权| H{检查目录路径权限}H -->|路径权限问题| I[修复路径权限]H -->|路径权限正常| J[考虑移动文件位置]

4.2 WSL 环境中的继承套接字问题

错误日志显示:using inherited sockets from "5;6;"

解决方案:

# 完全停止 Nginx
sudo systemctl stop nginx
sudo service nginx stop
sudo pkill -9 nginx# 清理 PID 和套接字文件
sudo rm -f /var/run/nginx.pid
sudo rm -f /var/run/nginx/*.pid
sudo rm -f /var/run/nginx/*.sock# 重新启动
sudo nginx

4.3 WSL 中 systemctl 不可用

在 WSL 环境中,systemctl 可能不可用,可以使用 service 命令:

sudo service nginx status
sudo service nginx start
sudo service nginx restart
sudo service nginx stop

或者直接运行 nginx:

sudo nginx

五、测试验证

5.1 在 WSL 内部测试

curl http://localhost:10001

5.2 创建测试文件

echo "<html><body><h1>测试页面</h1><p>Nginx 静态资源服务器工作正常!</p></body></html>" | sudo tee /home/swg/static/index.html

5.3 从 Windows 访问

在 Windows 浏览器中访问:

  • http://localhost:10001
  • http://127.0.0.1:10001

六、高级配置

6.1 WSL2 网络模式优化

在 Windows 用户目录下创建 .wslconfig 文件:

[wsl2]
networkingMode=mirrored
dnsTunneling=true
firewall=false
autoProxy=true

然后重启 WSL:

wsl --shutdown
wsl

6.2 Nginx 性能优化

在 Nginx 配置中添加性能优化参数:

server {listen 10001;server_name _;root /home/swg/static;index index.html index.htm;# 启用 gzip 压缩gzip on;gzip_vary on;gzip_min_length 1024;gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json;# 缓存设置location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {expires 30d;add_header Cache-Control "public, max-age=2592000";}# 其他配置...
}

七、服务管理

7.1 常用 Nginx 命令

# 启动 Nginx
sudo systemctl start nginx# 停止 Nginx
sudo systemctl stop nginx# 重启 Nginx
sudo systemctl restart nginx# 重新加载配置
sudo systemctl reload nginx# 检查状态
sudo systemctl status nginx# 查看日志
sudo tail -f /var/log/nginx/error.log
sudo tail -f /var/log/nginx/access.log

7.2 防火墙配置

# 允许端口通过防火墙
sudo ufw allow 10001/tcp# 检查防火墙状态
sudo ufw status

总结

在 Deepin Linux 和 WSL 环境中配置 Nginx 静态资源服务器需要注意以下几点:

  1. 正确安装和配置 Nginx:确保配置文件语法正确,站点已启用
  2. WSL 网络特殊性:可能需要额外的端口转发和防火墙配置
  3. 进程管理:WSL 中可能需要使用不同的命令管理 Nginx 进程
  4. 权限设置:确保 Nginx 可以访问静态资源目录
  5. 故障排查:学会使用日志和命令行工具诊断问题

按照本文的步骤,您应该能够成功在 Deepin Linux 或 WSL 环境中搭建一个功能完整的 Nginx 静态资源服务器,通过端口 10001 提供 /home/swg/static 目录的静态文件服务。

http://www.hskmm.com/?act=detail&tid=34385

相关文章:

  • 2025国际冷链运输推荐腾翼搏时,专业温控保障生物药品安全!
  • 鸿蒙设备开发-gpio控制
  • AI Agent和Agentic AI
  • http基础
  • Java基础语法与面向对象
  • Java中java.util.Random的用法
  • 2025年磨粉机厂家推荐排行榜,雷蒙磨粉机,环辊磨粉机,摆式磨粉机,矿石磨粉机,超微磨粉机,高压磨粉机公司推荐!
  • 我的学习开始及历程
  • 2025信息流代运营推荐:线尚网络精准投放,效果显著!
  • 零售行业绩效流程推行难点及 Tita 目标绩效一体化管理方案
  • Godot-C#处理节点关系
  • 软件工程-结队项目
  • 2025 年防撞钢护栏厂家推荐聊城市泰锌金属材料有限公司,桥梁,不锈钢,复合管,景观,灯光,热镀锌,河道,铝合金,绳索防撞钢护栏公司推荐
  • 2025年聚氨酯制品厂家推荐排行榜,浇注型聚氨酯,聚氨酯预聚体,聚氨酯胶黏剂,聚氨酯组合料,液体聚氨酯,专业品质与创新技术之选
  • Vue中keep-alive实现原理解析
  • 深入学习Spring Boot框架
  • 《探索C语言中数组的奥秘(下)》 - 教程
  • Java异步编程难题拆解
  • 2025年智能防爆灯/工矿灯厂家推荐排行榜,专业安全与高效照明解决方案!
  • 预测不可预测之物的校准学习技术
  • 2025年水产养殖设备厂家推荐排行榜,PP鱼池/微滤机/不锈钢微滤机/锦鲤池微滤机一体机/全自动污水过滤器/生物过滤器/循环水养殖系统公司推荐!
  • Java 无锁方式实现高性能线程
  • java语言程序设计类与对象课后作业 - 20243867孙堃2405
  • 详细介绍:2020年美国新冠肺炎疫情数据分析与可视化
  • java流程控制。
  • Java基础——包机制,JavaDoc生成文档
  • Misaka2298 的写题自检表
  • Java 中 NullPointerException 的 3 个常见原因及解决
  • Java 方法参数传递:到底是值传递还是引用传递?
  • ES6 箭头函数