25-deepin-linux-wsl-nginx-installation

news/2025/10/19 17:05:48/文章来源:https://www.cnblogs.com/suveng/p/19151078

windows11 #wsl #nginx

在 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.mzph.cn/news/940449.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

美股数据接口对接指南:快速获取指数实时行情

美股数据接口对接指南:快速获取纳斯达克、道琼斯指数实时行情 在金融科技应用、量化交易或数据可视化项目中,接入可靠的美股市场数据是常见的需求。本文将详细介绍如何通过API接口,高效、稳定地获取包括纳斯达克综合…

2025国际冷链运输推荐腾翼搏时,专业温控保障生物药品安全!

2025国际冷链运输推荐腾翼搏时,专业温控保障生物药品安全!随着全球生物医药行业的快速发展,对冷链物流的需求日益增长。特别是在2025年,预计全球医药市场的规模将进一步扩大,生物药品、临床样本、CAR-T细胞治疗产…

鸿蒙设备开发-gpio控制

正在施工 说明 比harmony4.0的时候文档好太多了,基本每个文件夹(sdk组件)下都有对应的详细文档。 设备 用的RK35xx , 其实用什么设备都可以,都是kernel向上提供接口,只要可以运行kernel,性能可以基本都可以适配。…

QT肝8天01--工程介绍

QT肝8天01--工程介绍2025-10-19 16:57 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-f…

AI Agent和Agentic AI

https://hub.baai.ac.cn/view/46037本文来自博客园,作者:transformert,转载请注明原文链接:https://www.cnblogs.com/ac-network/p/19151066

升级Win11 25H2 专业工作站版 最强系统

全新 Windows 11 25H2 专业工作站版,是微软面向高性能用户与专业创作者推出的旗舰级系统版本。它不仅继承了 Windows 11 的全新设计与安全体系,更在底层性能优化、资源调度、文件系统、虚拟化支持等方面进行了深度增…

如何在Java中进行多线程编程

在Java中进行多线程编程有多种方式,最常用的包括继承Thread类、实现Runnable接口、实现Callable接口,以及使用线程池等。以下是具体介绍和代码示例: 1. 继承Thread类 通过继承Thread类并重写run()方法来定义线程执行…

Java中java.util.Random的用法

java.util.Random是Java中用于生成伪随机数的类,提供了多种生成不同类型随机数的方法。 基本用法 1. 创建Random对象 import java.util.Random;// 创建Random对象(使用默认种子,通常是系统时间) Random random = n…

我的学习开始及历程

学习嵌入式 Linux 驱动的历程回顾第一篇的随笔中我写到:「带来更多的体会和收获,就不会是毫无意义的普通文字了。」 所以就当作重新梳理自己来写这个随笔了。嵌入式的开始接触 大约是大一的时候,比较疯狂的「迷恋」…

2025年磨粉机厂家推荐排行榜,雷蒙磨粉机,环辊磨粉机,摆式磨粉机,矿石磨粉机,超微磨粉机,高压磨粉机公司推荐!

2025年磨粉机厂家推荐排行榜:雷蒙磨粉机、环辊磨粉机、摆式磨粉机、矿石磨粉机、超微磨粉机、高压磨粉机公司推荐!随着工业技术的不断进步,磨粉机在矿业、化工、建材等多个领域发挥着越来越重要的作用。为了帮助企业…

Java基础语法与面向对象

什么是重载(Overload)和重写(Override)?有什么区别?重载(Overload):同一类中,方法名相同但参数列表不同(参数类型、个数、顺序不同),与返回值无关。重写(Override):子类继承父类后,对父类的方法进行重…

从汇编角度看C++优化:编译器真正做了什么 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

实用指南:【从零开始学习RabbitMQ】

实用指南:【从零开始学习RabbitMQ】pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monac…

Godot-C#处理节点关系

Godot C#处理节点关系 简介 我们知道在游戏中,任何事物都可以看做一个节点,而节点之间的关系可以帮助我们更好的管理游戏世界。Godot中,节点之间的关系可以分为两种:父子关系和兄弟关系。godot已经提供了现成的方法…

2025信息流代运营推荐:线尚网络精准投放,效果显著!

2025信息流代运营推荐:线尚网络精准投放,效果显著!随着互联网技术的飞速发展,信息流广告已成为企业营销的重要手段。然而,信息流代运营领域也面临着诸多技术挑战和数据问题。本文将深入探讨当前信息流代运营领域的…

零售行业绩效流程推行难点及 Tita 目标绩效一体化管理方案

在零售行业,市场环境瞬息万变,顾客需求日益多样化,使得绩效流程的推行充满挑战。要想在激烈竞争中脱颖而出,企业需借助高效工具实现目标绩效一体化管理,Tita 平台便是有力助手,能有效攻克常见难点。 零售行业绩效…

CTFHub 信息泄露通关笔记4:备份文件下载 bak文件 - 教程

CTFHub 信息泄露通关笔记4:备份文件下载 bak文件 - 教程2025-10-19 16:39 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important;…

软件工程-结队项目

软件工程-结队项目软件工程结队项目 项目参与成员 计科三班 3123006072 郭涛 计科三班 3123004548 袁智燊这个作业属于哪个课程 <https://edu.cnblogs.com/campus/gdgy/SoftwareEngineering2024>这个作业要求在哪…

go 并发赋值安全性

go 并发赋值安全性32/64位机器读写占用空间小于或等于32/64位的变量是原子操作,超过时属于非原子操作。 安全的赋值类型基本数据类型:字节型、布尔型、整型、浮点型、字符型其他数据类型:指针、函数 不安全的赋值类…

《探索C语言中数组的奥秘(下)》 - 教程

《探索C语言中数组的奥秘(下)》 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "M…