Ubuntu Nginx配置文件与管理

2026-01-06
5872 分钟
...

1. Nginx配置文件结构

配置文件位置

主配置文件: /etc/nginx/nginx.conf
全局配置: /etc/nginx/nginx.conf
站点配置目录: /etc/nginx/sites-available/
已启用站点: /etc/nginx/sites-enabled/
额外配置: /etc/nginx/conf.d/
模块配置: /etc/nginx/modules-available/

配置层次结构

nginx.conf (主配置)
├── http
│   ├── upstream (负载均衡)
│   ├── server (虚拟主机)
│   │   ├── location (URL匹配)
│   │   └── 其他server级别指令
│   └── 其他http级别指令
└── events (连接处理)

2. 常用配置示例

基础服务器配置

server {
    listen 80;
    server_name example.com www.example.com;
    
    root /var/www/example.com;
    index index.html index.htm index.php;
    
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    
    # PHP处理
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
    }
    
    # 静态文件缓存
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }
    
    # 禁止访问敏感文件
    location ~ /\.(env|git|ht|svn) {
        deny all;
    }
}

反向代理配置

server {
    listen 80;
    server_name app.example.com;
    
    location / {
        proxy_pass http://localhost:3000;  # 后端应用地址
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        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_cache_bypass $http_upgrade;
        proxy_read_timeout 90s;
    }
}

HTTPS配置 (Let’s Encrypt证书)

server {
    listen 443 ssl;
    server_name example.com www.example.com;
    
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
    
    # 其他配置同HTTP服务器部分
    root /var/www/example.com;
    index index.html;
    
    location / {
        try_files $uri $uri/ =404;
    }
}

# HTTP重定向到HTTPS
server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

3. Ubuntu中Nginx配置管理流程

创建新站点配置

# 1. 创建配置文件
sudo nano /etc/nginx/sites-available/example.com

# 2. 创建网站根目录
sudo mkdir -p /var/www/example.com
sudo chown -R www-data:www-data /var/www/example.com
sudo chmod -R 755 /var/www/example.com

# 3. 启用站点 (创建符号链接)
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

# 4. 测试配置
sudo nginx -t

# 5. 重新加载配置 (不中断现有连接)
sudo systemctl reload nginx

禁用站点

# 1. 删除符号链接
sudo unlink /etc/nginx/sites-enabled/example.com

# 2. 测试配置
sudo nginx -t

# 3. 重新加载配置
sudo systemctl reload nginx

配置片段复用 (snippets)

# 创建配置片段
sudo nano /etc/nginx/snippets/ssl-params.conf

# 在server块中包含
include snippets/ssl-params.conf;

4. 配置文件验证与服务管理命令

配置测试

# 检查配置文件语法
sudo nginx -t

# 仅检查不输出详细信息
sudo nginx -t -q

# 检查特定配置文件
sudo nginx -T  # 输出所有配置文件内容

服务管理

# 重新加载配置 (平滑重启不中断连接)
sudo systemctl reload nginx
# 
sudo nginx -s reload

# 完全重启服务 (会短暂中断连接)
sudo systemctl restart nginx

# 查看Nginx状态
sudo systemctl status nginx

# 查看Nginx进程
ps aux | grep nginx

# 查看监听端口
sudo ss -tulpn | grep nginx

5. 常用调试命令

# 查看错误日志 (实时)
sudo tail -f /var/log/nginx/error.log

# 查看访问日志 (实时)
sudo tail -f /var/log/nginx/access.log

# 仅查看错误日志中的错误
sudo grep -i error /var/log/nginx/error.log

# 查看Nginx版本和编译参数
nginx -v    # 版本
nginx -V    # 详细版本和编译参数

# 在不启动服务的情况下测试配置
sudo nginx -t

6. 常见配置问题解决

配置后无法访问

  1. 检查配置语法: sudo nginx -t

  2. 检查防火墙设置: sudo ufw status

  3. 检查文件权限:

    sudo chown -R www-data:www-data /var/www/your_site
    sudo chmod -R 755 /var/www/your_site
  4. 检查SELinux (如果启用): sudo setenforce 0 (临时禁用)

403 Forbidden错误

# 检查Nginx运行用户是否有权限访问文件
sudo -u www-data ls -la /var/www/your_site

# 修复权限
sudo chmod -R 755 /var/www/your_site
sudo chown -R www-data:www-data /var/www/your_site

502 Bad Gateway错误

  1. 检查后端服务是否运行

  2. 检查proxy_pass指向是否正确

  3. 增加超时设置:

    proxy_connect_timeout 60s;
    proxy_read_timeout 120s;

7. 配置备份与恢复

# 备份所有配置
sudo tar -czf nginx-config-backup-$(date +%F).tar.gz /etc/nginx

# 恢复配置
sudo tar -xzf nginx-config-backup-2023-01-01.tar.gz -C /
sudo nginx -t && sudo systemctl reload nginx

8. 最佳实践

  1. 每个站点一个配置文件 - 便于管理和故障排查
  2. 修改前备份 - sudo cp /etc/nginx/sites-available/example.com /etc/nginx/sites-available/example.com.bak
  3. 先测试再应用 - 始终使用 sudo nginx -t 验证配置
  4. 平滑重启 - 优先使用 sudo systemctl reload nginx 而不是 restart
  5. 注释清晰 - 在配置文件中添加说明性注释
  6. 权限最小化 - 仅授予Nginx访问所需文件的权限
# 良好注释示例
# 以下配置于2023-01-15添加用于解决移动设备样式问题
location ~* \.(css|js)$ {
    add_header Cache-Control "public, max-age=86400";
}

重要提示:

  • 每次修改配置后必须运行 sudo nginx -t 测试配置
  • 配置正确后再运行 sudo systemctl reload nginx 应用更改
  • 重启而不是重新加载会导致短暂的服务中断
  • 配置文件错误可能导致Nginx无法启动,确保有备份
  • 使用 sudo journalctl -u nginx -f 实时查看Nginx服务日志

如果您觉得这篇文章有帮助,请点个赞吧~

分享文章

相关文章

更多文章 →
nginx2025-06-07
Nginx配置介绍
一、Nginx配置介绍 是一个高性能的‌ 和反向代理服务器,以其轻量级、高并发能力而闻名。它的 配置文件通常位于 /etc/nginx/nginx.conf ,但具体位置可能会因安装方式和操作系统而异。Nginx的配置文件主要由以下几个部分组成: 1. 全局块:配置影响Nginx全局的指令,如运行Nginx服务器的用户组、Nginx进程PID存放路径、日志存放路径、配置文件引入、允许生成的worker process数等。 2. :配置...
学习
nginx2025-06-05
在 Ubuntu 上安装和配置 Nginx 的完整指南
Nginx 是一款高性能的开源 Web ,它可以用于反向代理、负载均衡、静态文件服务等。本指南将带您逐步完成在 Ubuntu 22.04 上安装和配置 Nginx 的过程。 步骤 1:更新软件包索引 在安装任何新软件之前,首先确保您的系统上的软件包索引是最新的。打开终端并运行以下命令: 步骤 2: 在 Ubuntu 22.04 上,可以通过 apt 包管理器轻松安装 Nginx。运行以下命令: 安装完成后,可以使用以下命令来检查 Ngi...
学习
nginx2024-11-25
nginx-前端必会-项目部署-精简通用篇
这篇文章是关于 Nginx 的介绍,包括其在项目部署中的作用,如反向代理、负载均衡等。还介绍了 Nginx 的特点、下载安装、常用命令、实际应用中的配置,如设置不同端口和文件夹,解决跨域、缓存、https 等问题,最后给出了一个全面的配置示例,并总结了带小白学习 Nginx 的主要内容。 关联问题: 如何优化nginx配置 nginx能否处理高并发 怎样解决nginx报错 前言 最近在公司部署项目时遇上了一点关于nginx的问题,于是就...
学习
nginx2024-10-16
nginx使用小记
厚积薄发,静水流深,今天介绍nginx的一些使用 基本配置文件 hosts文件配置域名解析 服务器已经安装了nginx, 并且监听80端口: 如果在服务器的hosts文件中配置了域名, 那么请求网络资源时, 首先会去hosts文件中查找是否有该域名的对应IP, 如果有, 直接请求该路径, 如果没有, 再去请求公共的DNS查询IP 例如, 在服务器的hosts文件中追加该配置: 然后使用 curl tcwwjdr/wwjfiles/ip....
学习
nginx2024-05-30
感受下 nginx 带来的魅力
引言 :纯干货分享,汇总了我在工作中八年遇到的各种 Nginx 使用场景,对这篇文章进行了细致的整理和层次分明的讲解,旨在提供简洁而深入的内容。希望这能为你提供帮助和启发! 对于前端开发人员来说,Node.js 是一种熟悉的技术。虽然 Nginx 和 Node.js 在某些理念上有相似之处,比如都支持 HTTP 服务、事件驱动和异步非阻塞操作,但两者并不冲突,各有各自擅长的领域: Nginx :擅长处理底层的服务器端资源,如静态资源处理...
学习
nginx2024-02-21
三年前端还不会配置Nginx?刷完这篇就够了
一口气看完,比自学强十倍! 什么是Nginx Nginx是一个开源的高性能HTTP和反向代理服务器。它可以用于处理静态资源、负载均衡、反向代理和缓存等任务。Nginx被广泛用于构建高可用性、高性能的Web应用程序和网站。它具有低内存消耗、高并发能力和良好的稳定性,因此在互联网领域非常受欢迎。 为什么使用Nginx 1. 高性能:Nginx采用事件驱动的异步架构,能够处理大量并发连接而不会消耗过多的系统资源。它的处理能力比传统的Web服务...
学习

评论

请登录后发表评论

去登录
加载评论中...

目录