Ubuntu Nginx 安装指南: 详细步骤与常见问题解答 – wiki基地

Ubuntu Nginx 安装指南: 详细步骤与常见问题解答

Nginx (发音为 “engine-x”) 是一个高性能、轻量级的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。它以其卓越的性能、稳定性、丰富的功能、简单的配置和低资源消耗而闻名,被广泛应用于网站服务器、负载均衡器、缓存服务器和API网关等多种场景。

本文将提供一份详尽的 Ubuntu 系统上 Nginx 服务器安装指南,涵盖从安装、配置到解决常见问题的方方面面,帮助您轻松搭建并运行 Nginx 服务器。

目录

  1. 准备工作
  2. 安装 Nginx
    • 使用 apt 包管理器安装
    • 从 Nginx 官方仓库安装(推荐)
  3. 配置 Nginx
    • Nginx 目录结构
    • 基本配置:nginx.conf
    • 配置虚拟主机 (Server Block)
  4. 启动、停止和重启 Nginx
    • 使用 systemctl 管理 Nginx 服务
  5. 测试 Nginx 配置
  6. Nginx 常见配置示例
    • 静态文件服务
    • 反向代理
    • 负载均衡
    • HTTPS 配置 (Let’s Encrypt)
  7. 常见问题解答 (FAQ)
    • Nginx 启动失败
    • Nginx 无法访问
    • Nginx 权限问题
    • Nginx 性能优化
    • Nginx 日志分析
  8. 总结

1. 准备工作

在开始安装 Nginx 之前,请确保您满足以下条件:

  • Ubuntu 系统: 本指南适用于 Ubuntu 18.04 LTS, 20.04 LTS, 22.04 LTS 以及更高版本。
  • 服务器访问权限: 您需要具有 root 权限或可以使用 sudo 命令来安装和配置 Nginx。
  • 网络连接: 确保您的服务器可以连接到互联网,以便下载 Nginx 软件包。
  • 域名 (可选): 如果您计划配置虚拟主机来托管多个网站,请确保您拥有相应的域名,并已将域名解析到您的服务器 IP 地址。

2. 安装 Nginx

Ubuntu 提供两种安装 Nginx 的方式:使用 apt 包管理器安装,或从 Nginx 官方仓库安装。 推荐使用从 Nginx 官方仓库安装的方式,因为它可以提供更新版本的 Nginx 和最新的安全补丁。

  • 2.1 使用 apt 包管理器安装

这是最简单的安装方式,但它可能安装的是 Ubuntu 软件源中较旧版本的 Nginx。

  1. 更新 apt 包索引:

bash
sudo apt update

  1. 安装 Nginx:

bash
sudo apt install nginx

  • 2.2 从 Nginx 官方仓库安装(推荐)

这种方式可以确保您安装的是最新版本的 Nginx。

  1. 添加 Nginx 官方 GPG 密钥:

“`bash
sudo apt update
sudo apt install curl gnupg2 ca-certificates ubuntu-keyring

curl https://nginx.org/keys/nginx_signing.key | gpg –dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
“`

  1. 验证 GPG 密钥指纹:

“`bash
gpg –dry-run –quiet –import –import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg

#你应该看到以下输出,确保指纹匹配:
#pub rsa4096 2011-08-19 [SC] [expires: 2024-09-14]
# 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62
#uid nginx signing key signing-key@nginx.com
“`

  1. 添加 Nginx 官方仓库到 apt 源:

根据您的 Ubuntu 版本选择合适的配置:

  • Ubuntu 22.04 (Jammy Jellyfish):

    bash
    echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu/ jammy nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
    echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu/ jammy nginx-debug" | sudo tee /etc/apt/sources.list.d/nginx-debug.list

  • Ubuntu 20.04 (Focal Fossa):

    bash
    echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu/ focal nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
    echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu/ focal nginx-debug" | sudo tee /etc/apt/sources.list.d/nginx-debug.list

  • Ubuntu 18.04 (Bionic Beaver):

    bash
    echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu/ bionic nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
    echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu/ bionic nginx-debug" | sudo tee /etc/apt/sources.list.d/nginx-debug.list

  • 更新 apt 包索引:

bash
sudo apt update

  1. 安装 Nginx:

bash
sudo apt install nginx

3. 配置 Nginx

  • 3.1 Nginx 目录结构

安装完成后,了解 Nginx 的目录结构非常重要:

  • /etc/nginx/: Nginx 的主要配置文件目录。
  • /etc/nginx/nginx.conf: Nginx 的主配置文件。
  • /etc/nginx/conf.d/: 用于存放自定义配置文件的目录。这些配置文件会被 nginx.conf 主配置文件自动加载。
  • /etc/nginx/sites-available/: 存放可用的虚拟主机配置文件。
  • /etc/nginx/sites-enabled/: 存放已启用的虚拟主机配置文件,通常是 sites-available 目录中配置文件的符号链接。
  • /var/log/nginx/: 存放 Nginx 的日志文件,包括 access.log (访问日志) 和 error.log (错误日志)。
  • /usr/share/nginx/html/: Nginx 的默认网页根目录。

  • 3.2 基本配置: nginx.conf

nginx.conf 是 Nginx 的主配置文件,用于配置 Nginx 的全局设置。以下是一个 nginx.conf 文件的示例:

“`nginx
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
worker_connections 768;
# multi_accept on;
}

http {
##
# Basic Settings
##

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;

include /etc/nginx/mime.types;
default_type application/octet-stream;

##
# SSL Settings
##

ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;

##
# Logging Settings
##

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

##
# Gzip Settings
##

gzip on;
gzip_disable "msie6";

# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

##
# Virtual Host Configs
##

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

}

mail {

# See sample authentication script at:

# http://wiki.dovecot.org/Nginx

# auth_http localhost:80/auth-handler;

# pop3_auth localhost:80/auth-handler;

# imap_auth localhost:80/auth-handler;

# See sample redundant authentication script at:

# http://wiki.dovecot.org/Nginx

# auth_http_header X-Original-URI $request_uri;

# auth_http_header X-Remote-User $remote_user;

# auth_http localhost:81/auth-handler;

# pop3_auth localhost:81/auth-handler;

# imap_auth localhost:81/auth-handler;

}

“`

主要配置指令说明:

  • user: 指定运行 Nginx 进程的用户。
  • worker_processes: 指定 Nginx 工作进程的数量,通常设置为 auto,让 Nginx 自动根据 CPU 核心数进行调整。
  • events: 配置 Nginx 的事件处理模型。
  • http: 配置 HTTP 服务器相关的设置。

    • sendfile: 启用或禁用 sendfile 系统调用,用于高效地传输静态文件。
    • keepalive_timeout: 设置客户端连接的保持活动时间。
    • include /etc/nginx/mime.types: 包含 MIME 类型配置文件,用于正确地设置 HTTP 响应的 Content-Type 头。
    • access_log: 指定访问日志文件的路径。
    • error_log: 指定错误日志文件的路径。
    • gzip: 启用或禁用 Gzip 压缩,用于减少传输的数据量。
    • include /etc/nginx/conf.d/*.conf: 包含 conf.d 目录中的所有配置文件。
    • include /etc/nginx/sites-enabled/*: 包含 sites-enabled 目录中的所有虚拟主机配置文件。
  • 3.3 配置虚拟主机 (Server Block)

虚拟主机允许您在一台服务器上托管多个网站。 在 Nginx 中,虚拟主机通过 server 块进行配置。

  1. 创建虚拟主机配置文件:

/etc/nginx/sites-available/ 目录下创建一个新的配置文件,例如 example.com.conf。 使用您自己的域名替换 example.com

bash
sudo nano /etc/nginx/sites-available/example.com.conf

  1. 配置虚拟主机:

在配置文件中添加以下内容,替换相应的值:

“`nginx
server {
listen 80;
server_name example.com www.example.com;

   root /var/www/example.com;
   index index.html index.htm;

   location / {
       try_files $uri $uri/ =404;
   }

   error_page 404 /404.html;
   location = /404.html {
       root /usr/share/nginx/html;
   }

   error_page 500 502 503 504 /50x.html;
   location = /50x.html {
       root /usr/share/nginx/html;
   }

}
“`

  • listen: 指定 Nginx 监听的端口。
  • server_name: 指定虚拟主机的域名。
  • root: 指定网站的根目录。
  • index: 指定默认的索引文件。
  • location: 配置 URL 的处理方式。
    • try_files: 尝试按照指定的顺序查找文件,如果找不到则返回 404 错误。
  • error_page: 配置错误页面。

  • 创建网站根目录:

bash
sudo mkdir -p /var/www/example.com
sudo chown -R www-data:www-data /var/www/example.com

  1. 创建示例 HTML 文件:

bash
sudo nano /var/www/example.com/index.html

添加以下内容:

“`html



Welcome to Example.com!

Success! The Example.com virtual host is working!


“`

  1. 启用虚拟主机:

创建从 sites-available 目录到 sites-enabled 目录的符号链接:

bash
sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/

  1. 禁用默认虚拟主机 (可选):

如果你只需要配置自己的虚拟主机,可以禁用默认虚拟主机:

bash
sudo rm /etc/nginx/sites-enabled/default

4. 启动、停止和重启 Nginx

  • 4.1 使用 systemctl 管理 Nginx 服务

Ubuntu 使用 systemd 来管理系统服务。 您可以使用 systemctl 命令来启动、停止、重启和检查 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 systemctl enable nginx

  • 取消 Nginx 开机自启:

bash
sudo systemctl disable nginx

5. 测试 Nginx 配置

在重启或重新加载 Nginx 之前,务必测试配置文件的语法是否正确:

bash
sudo nginx -t

如果配置正确,您会看到以下输出:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

6. Nginx 常见配置示例

  • 6.1 静态文件服务

Nginx 可以高效地提供静态文件,例如 HTML、CSS、JavaScript 和图像。

“`nginx
server {
listen 80;
server_name example.com;
root /var/www/example.com;

location / {
    try_files $uri $uri/ =404;
}

}
“`

此配置会将对 example.com 的所有请求都映射到 /var/www/example.com 目录。

  • 6.2 反向代理

Nginx 可以用作反向代理服务器,将客户端请求转发到后端服务器。

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

location / {
    proxy_pass http://localhost:3000; # 将请求转发到本地 3000 端口
    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;
}

}
“`

此配置会将对 example.com 的所有请求都转发到本地 3000 端口运行的应用程序。

  • 6.3 负载均衡

Nginx 可以将请求分发到多个后端服务器,实现负载均衡。

“`nginx
upstream backend {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}

server {
listen 80;
server_name example.com;

location / {
    proxy_pass http://backend;
    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;
}

}
“`

此配置会将对 example.com 的请求分发到 backend1.example.combackend2.example.combackend3.example.com 三台服务器。

  • 6.4 HTTPS 配置 (Let’s Encrypt)

使用 Let’s Encrypt 可以轻松地为您的网站配置 HTTPS。

  1. 安装 Certbot:

bash
sudo apt install certbot python3-certbot-nginx

  1. 运行 Certbot:

bash
sudo certbot --nginx -d example.com -d www.example.com

Certbot 会自动配置 Nginx 并获取 SSL 证书。 按照提示完成验证过程。

7. 常见问题解答 (FAQ)

  • 7.1 Nginx 启动失败

  • 问题: Nginx 启动失败,并显示错误信息。

  • 解决方法:

    • 检查 Nginx 配置文件语法是否正确:sudo nginx -t
    • 查看 Nginx 错误日志文件 /var/log/nginx/error.log,查找具体的错误信息。
    • 确保没有其他程序占用了 80 或 443 端口。
    • 检查防火墙设置,确保允许 80 和 443 端口的流量。
  • 7.2 Nginx 无法访问

  • 问题: 无法通过浏览器访问 Nginx 服务器。

  • 解决方法:

    • 检查 Nginx 服务是否正在运行:sudo systemctl status nginx
    • 检查防火墙设置,确保允许 80 和 443 端口的流量。
    • 检查域名解析是否正确,确保域名指向服务器的 IP 地址。
    • 检查虚拟主机配置是否正确,确保 server_name 指令与域名匹配。
    • 检查网站根目录是否存在,并且包含索引文件 (例如 index.html)。
  • 7.3 Nginx 权限问题

  • 问题: Nginx 无法访问网站文件。

  • 解决方法:

    • 确保网站文件的所有者和组与 Nginx 运行的用户 (通常是 www-data) 匹配:sudo chown -R www-data:www-data /var/www/example.com
    • 确保网站文件具有适当的权限:sudo chmod -R 755 /var/www/example.com
  • 7.4 Nginx 性能优化

  • 问题: Nginx 服务器性能不足。

  • 解决方法:

    • 调整 worker_processesworker_connections 的值,以更好地利用服务器资源。
    • 启用 Gzip 压缩,减少传输的数据量。
    • 使用缓存,缓存静态文件和动态内容。
    • 使用 CDN (内容分发网络) 来加速静态资源的访问。
    • 优化数据库查询和应用程序代码。
  • 7.5 Nginx 日志分析

  • 问题: 需要分析 Nginx 的访问日志和错误日志。

  • 解决方法:

    • 使用 tail -f /var/log/nginx/access.log 实时查看访问日志。
    • 使用 tail -f /var/log/nginx/error.log 实时查看错误日志。
    • 使用 grep 命令搜索特定的日志条目。
    • 使用日志分析工具 (例如 goaccessawstats) 来生成统计报告。

8. 总结

本文详细介绍了在 Ubuntu 系统上安装、配置和管理 Nginx 服务器的步骤。 通过遵循这些步骤,您可以轻松地搭建并运行一个高性能、稳定的 Nginx 服务器,为您的网站提供可靠的服务。 同时,本文还提供了常见问题解答,帮助您解决在使用 Nginx 过程中可能遇到的问题。 希望本文能够帮助您更好地理解和使用 Nginx。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部