Nginx 基础配置:完整教程 – wiki词典

Nginx 基础配置:完整教程

Nginx(发音为 “engine-x”)是一个高性能、轻量级的开源Web服务器,同时也可以作为反向代理、负载均衡器和HTTP缓存。凭借其卓越的性能、稳定性和低资源消耗,Nginx被广泛用于服务静态内容和处理大量并发连接。本教程将为您提供Nginx基础配置的完整指南。


1. 安装 Nginx

在基于Debian的系统(如Ubuntu)上安装Nginx非常简单:

  1. 更新包索引
    bash
    sudo apt update
  2. 安装 Nginx
    bash
    sudo apt install nginx

    安装完成后,Nginx通常会立即启动并运行。
  3. 调整防火墙 (UFW)
    如果您使用UFW(Uncomplicated Firewall),需要允许HTTP和HTTPS流量:
    bash
    sudo ufw allow 'Nginx HTTP'
    sudo ufw allow 'Nginx HTTPS' # 如果您计划使用HTTPS
    sudo ufw enable # 如果UFW尚未启用
    sudo ufw status

    安装并配置防火墙后,您可以通过在浏览器中访问服务器的IP地址来验证Nginx是否正在运行。您应该会看到Nginx的默认欢迎页面。

2. 核心配置文件结构

Nginx的主配置文件通常位于 /etc/nginx/nginx.conf。Nginx的配置指令被组织成一个分层的块结构,称为“上下文”(contexts)。

关键上下文包括:
* main: 全局作用域,包含影响整个Nginx实例的指令(例如 userworker_processeserror_log)。
* events: 配置连接处理设置(例如 worker_connections)。
* http: 包含所有与HTTP相关的配置,并作为 server 块的容器。
* server: 定义虚拟主机和特定于服务器的设置,通常通过 listen 端口和 server_name 进行区分。
* location: 配置 server 块内特定URL的行为。
* upstream: 定义后端服务器组,用于负载均衡。

指令以分号 (;) 结尾,块指令使用大括号 ({}) 来分组相关设置。


3. 服务静态内容

Nginx在服务静态文件(如HTML、CSS、JavaScript和图像)方面进行了高度优化。

要服务静态内容,您通常需要在Nginx配置中定义一个 server 块和一个 location 块。

示例配置 (/etc/nginx/sites-available/your_domain.conf):

“`nginx
server {
listen 80; # 监听端口80,用于HTTP流量
server_name your_domain.com www.your_domain.com; # 替换为您的域名

root /var/www/your_domain/html; # 指定网站文件的根目录
index index.html index.htm; # 指定默认的索引文件

location / {
    try_files $uri $uri/ =404; # 尝试提供请求的文件,然后是目录,如果都找不到则返回404
}

# 示例:从不同目录提供特定静态资产
location /images/ {
    alias /var/www/your_domain/assets/images/; # 为 /images/ 请求提供此目录中的文件
    expires 30d; # 缓存图像30天
    access_log off;
    log_not_found off;
}

}
``
*
listen 80;指定服务器在端口80(HTTP)上监听。
*
server_name your_domain.com;设置此服务器块负责的域名。
*
root /var/www/your_domain/html;定义文件服务的根目录。
*
index index.html;指定当请求目录时提供的默认文件。
*
location / {}定义匹配根URL的请求行为。
*
try_files $uri $uri/ =404;` 尝试将请求的URI作为文件提供,然后作为目录提供,如果两者都找不到,则返回404错误。

创建内容(例如,在 /var/www/your_domain/html 中创建 index.html)后,通过创建符号链接并重新加载Nginx来启用站点:
bash
sudo mkdir -p /var/www/your_domain/html
sudo nano /var/www/your_domain/html/index.html # 添加一些HTML内容
sudo ln -s /etc/nginx/sites-available/your_domain.conf /etc/nginx/sites-enabled/
sudo nginx -t # 测试配置语法
sudo systemctl reload nginx # 重新加载Nginx


4. 反向代理

Nginx可以充当反向代理,将客户端请求转发到后端应用程序服务器(例如 Node.js、Python、Java),并返回它们的响应。这增强了安全性、优化了流量,并可以提高性能。

示例反向代理配置:

“`nginx
server {
listen 80;
server_name your_domain.com;

location / {
    proxy_pass http://localhost:8000; # 将请求转发到运行在端口8000的后端服务器
    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;
}

}
``
*
proxy_pass指定代理服务器的协议和地址。
*
proxy_set_header` 指令确保重要的客户端信息(如主机、IP地址)传递给后端服务器。


5. 负载均衡 (基础)

Nginx可以将传入的网络流量分配到多个后端服务器,从而优化资源利用率并最小化响应时间。默认的负载均衡方法是轮询(Round Robin)。

示例负载均衡配置:

“`nginx
upstream backend_servers {
server backend1.example.com:8000;
server backend2.example.com:8001;
server 192.168.1.10:8002 weight=3; # 分配权重以处理更多请求
}

server {
listen 80;
server_name your_domain.com;

location / {
    proxy_pass http://backend_servers; # 引用 upstream 块
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

}
``
*
upstream块定义了一组服务器。
* 请求在
upstream块中列出的服务器之间分配。
*
weight` 参数可用于向特定服务器发送相对更高数量的请求。


6. SSL/TLS 配置 (HTTPS 与 Let’s Encrypt)

使用HTTPS保护您的网站至关重要。Let’s Encrypt 提供免费的TLS/SSL证书,Certbot 可以自动化此过程。

  1. 安装 Certbot
    bash
    sudo apt install certbot python3-certbot-nginx
  2. 获取并配置 SSL 证书
    bash
    sudo certbot --nginx -d your_domain.com -d www.your_domain.com

    Certbot 将以交互方式引导您完成整个过程,自动验证域名所有权,并修改您的Nginx配置以包含SSL证书并设置HTTP到HTTPS的重定向。
    基本的SSL配置将包含 listen 443 ssl;ssl_certificatessl_certificate_key 等指令。
  3. 验证自动续订
    Let’s Encrypt 证书的有效期为90天,因此自动续订至关重要。Certbot 会为此设置一个 cron 任务。您可以使用以下命令进行测试:
    bash
    sudo certbot renew --dry-run

7. 常用 Nginx 命令

管理Nginx服务涉及以下几个命令:
* 启动 Nginx
bash
sudo systemctl start nginx

* 停止 Nginx
bash
sudo systemctl stop nginx

* 重启 Nginx:这将停止并重新启动服务。用于重大的配置更改。
bash
sudo systemctl restart nginx

* 重新加载 Nginx:这会优雅地重新加载配置,而不会中断活动连接。用于次要的配置更改。
bash
sudo systemctl reload nginx

* 检查 Nginx 状态
bash
sudo systemctl status nginx

* 测试配置语法:在重新加载或重启Nginx之前,始终运行此命令以检查语法错误。
bash
sudo nginx -t


8. 故障排除

常见的Nginx问题通常源于配置错误、权限问题或后端服务器故障。
* 检查 Nginx 日志:错误日志 (/var/log/nginx/error.log) 提供有关问题的详细信息。
* 测试配置:使用 sudo nginx -t 检查配置文件中的语法错误。
* 403 Forbidden 错误:这通常表示文件权限问题、缺少索引文件或 rootindex 指令不正确。确保Nginx对您的Web文件具有读取权限(例如,sudo chown -R www-data:www-data /path/to/your/nginx/root/directory)。
* 404 Not Found 错误:找不到请求的资源。请验证文件路径、root 指令以及文件是否存在。
* 5xx 错误 (例如 502 Bad Gateway, 504 Gateway Timeout):这些通常指向后端服务器的问题(例如,后端应用程序未运行,或Nginx无法连接到它)。检查后端服务器日志和连接性。
* 服务启动失败:检查日志以获取上下文,并使用 sudo nginx -t 验证配置。确保配置文件和日志文件具有正确的权限。


结论

Nginx是一个多功能且强大的Web服务器,掌握其基本配置对于任何Web开发人员或系统管理员都至关重要。通过本教程,您应该对Nginx的安装、配置、静态文件服务、反向代理、负载均衡以及SSL/TLS设置有了全面的了解。熟练运用这些基础知识,将有助于您构建和维护高性能、高可用的Web应用程序。


I have finished writing the article.I have successfully written the article “Nginx 基础配置:完整教程”.

Final To-Do List:
1. [completed] Gather information on Nginx basic configuration using google_web_search.
2. [completed] Structure the gathered information into a comprehensive article about Nginx basic configuration.
3. [completed] Write the article.

滚动至顶部