Ubuntu系统中安装Nginx服务器的详细步骤 – wiki基地

在 Ubuntu 系统中安装 Nginx 服务器的详细步骤

Nginx 是一款高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。它以其稳定性、丰富的功能集、简单的配置文件和低系统资源消耗而闻名。在 Ubuntu 系统中安装 Nginx 非常简单,本文将详细介绍安装过程的每一个步骤,并提供一些配置和管理 Nginx 的实用技巧。

文章目录

  1. 准备工作

    • 1.1 系统要求
    • 1.2 更新软件包列表
    • 1.3 具有 sudo 权限的用户
  2. 安装 Nginx

    • 2.1 使用 apt 包管理器安装
    • 2.2 验证安装
  3. 管理 Nginx 进程

    • 3.1 启动 Nginx
    • 3.2 停止 Nginx
    • 3.3 重启 Nginx
    • 3.4 重新加载配置
    • 3.5 查看 Nginx 状态
    • 3.6 开机自启
  4. 配置防火墙 (UFW)

    • 4.1 查看可用应用配置
    • 4.2 允许 Nginx Full 流量
    • 4.3 允许 Nginx HTTP 流量 (80 端口)
    • 4.4 允许 Nginx HTTPS 流量 (443 端口)
    • 4.5 验证防火墙状态
  5. 配置 Nginx 服务器块 (Server Blocks)

    • 5.1 服务器块的作用
    • 5.2 创建网站目录
    • 5.3 创建示例 HTML 文件
    • 5.4 创建服务器块配置文件
    • 5.5 启用服务器块
    • 5.6 测试配置
    • 5.7 设置服务器名称
  6. Nginx 重要文件和目录

    • 6.1 内容目录
    • 6.2 服务器配置目录
    • 6.3 服务器日志目录
  7. Nginx 进阶配置

    • 7.1 配置 HTTPS
      • 7.1.1 获取 SSL 证书 (Let’s Encrypt)
      • 7.1.2 配置 Nginx 使用 SSL 证书
    • 7.2 配置反向代理
    • 7.3 配置负载均衡
    • 7.4 静态文件优化
    • 7.5 启用 Gzip 压缩
  8. 常见问题排查

    • 8.1 403 Forbidden 错误
    • 8.2 502 Bad Gateway 错误
    • 8.3 无法访问网站
    • 8.4 Nginx 无法启动
  9. 总结


1. 准备工作

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

  • 1.1 系统要求:

    • 一台运行 Ubuntu 的服务器(推荐 Ubuntu 20.04 LTS 或更高版本)。
    • 稳定的网络连接。
    • 至少 1GB 的 RAM(推荐 2GB 或更多)。
    • 足够的磁盘空间(根据您的网站大小而定)。
  • 1.2 更新软件包列表:

    在安装任何新软件之前,更新本地软件包列表是一个好习惯。这将确保您安装的是最新版本的软件包,并修复可能存在的依赖关系问题。打开终端并运行以下命令:

    bash
    sudo apt update

  • 1.3 具有 sudo 权限的用户:

    您需要一个具有 sudo 权限的用户帐户来执行安装和配置命令。sudo 允许您以超级用户(root)的身份运行命令,这是安装和管理系统级软件所必需的。

2. 安装 Nginx

  • 2.1 使用 apt 包管理器安装:

    Ubuntu 的默认软件包管理器是 apt。使用 apt 安装 Nginx 非常简单,只需运行以下命令:

    bash
    sudo apt install nginx

    此命令将执行以下操作:

    1. 从 Ubuntu 软件仓库下载 Nginx 软件包及其依赖项。
    2. 自动安装 Nginx 并创建必要的系统用户和组。
    3. 启动 Nginx 服务并将其设置为开机自启。
  • 2.2 验证安装:

    安装完成后,您可以通过多种方式验证 Nginx 是否已成功安装并正在运行:

    • 检查 Nginx 服务状态:

      bash
      sudo systemctl status nginx

      如果 Nginx 正在运行,您将看到类似以下的输出:

      ● nginx.service - A high performance web server and a reverse proxy server
      Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
      Active: active (running) since ...
      ...

      Active: active (running) 表明nginx服务正在运行中

    • 访问默认欢迎页面:

      在您的 Web 浏览器中输入服务器的 IP 地址或域名。如果 Nginx 安装成功,您将看到 Nginx 的默认欢迎页面。

      如果您不知道服务器的 IP 地址,可以使用以下命令查找:

      bash
      ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

      或者
      curl -4 icanhazip.com

      eth0 替换为您的网络接口名称(例如 ens3enp0s3 等)。

3. 管理 Nginx 进程

systemctl 是用于管理 systemd 系统和服务管理器的命令。以下是一些常用的 Nginx 管理命令:

  • 3.1 启动 Nginx:

    bash
    sudo systemctl start nginx

  • 3.2 停止 Nginx:

    bash
    sudo systemctl stop nginx

  • 3.3 重启 Nginx:

    bash
    sudo systemctl restart nginx

    这将停止并重新启动 Nginx 服务。 建议在进行重要的配置更改后执行此操作。

  • 3.4 重新加载配置:

    bash
    sudo systemctl reload nginx

    这将重新加载 Nginx 配置文件,而无需停止服务。当您对配置文件进行了较小的更改,并且不希望中断现有连接时,这非常有用。

  • 3.5 查看 Nginx 状态:

    bash
    sudo systemctl status nginx

  • 3.6 开机自启:

    默认情况下,Nginx 安装后会自动设置为开机自启。如果您需要手动启用或禁用开机自启,可以使用以下命令:

    • 启用开机自启:

      bash
      sudo systemctl enable nginx

    • 禁用开机自启:

      bash
      sudo systemctl disable nginx

4. 配置防火墙 (UFW)

如果您启用了防火墙(例如 Ubuntu 的默认防火墙 UFW),则需要允许 Nginx 流量通过防火墙。

  • 4.1 查看可用应用配置:

    bash
    sudo ufw app list

    您应该看到类似以下的输出:

    Available applications:
    Nginx Full
    Nginx HTTP
    Nginx HTTPS
    OpenSSH

  • 4.2 允许 Nginx Full 流量:

    bash
    sudo ufw allow 'Nginx Full'

    Nginx Full 配置文件同时打开端口 80 (HTTP) 和 443 (HTTPS)。

  • 4.3 允许 Nginx HTTP 流量 (80 端口):

    bash
    sudo ufw allow 'Nginx HTTP'

    如果您只需要允许 HTTP 流量,可以使用此命令。

  • 4.4 允许 Nginx HTTPS 流量 (443 端口):

    bash
    sudo ufw allow 'Nginx HTTPS'

    如果您只需要允许 HTTPS 流量,可以使用此命令。

  • 4.5 验证防火墙状态:

    bash
    sudo ufw status

    您应该看到 Nginx 相关的规则已添加到防火墙。

5. 配置 Nginx 服务器块 (Server Blocks)

服务器块(Server Blocks)允许您在一台服务器上托管多个网站。每个服务器块定义一个网站的配置,包括域名、根目录、日志文件等。

  • 5.1 服务器块的作用:

    服务器块类似于 Apache 中的虚拟主机。它们允许您根据请求的域名或 IP 地址将流量路由到不同的网站目录。

  • 5.2 创建网站目录:

    首先,为您要托管的网站创建一个目录。例如,如果您要托管一个名为 example.com 的网站,可以创建以下目录:

    bash
    sudo mkdir -p /var/www/example.com/html

    -p 选项会创建所有不存在的父目录。

  • 5.3 创建示例 HTML 文件:

    在网站目录中创建一个简单的 HTML 文件,用于测试服务器块是否正常工作:

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

    将以下内容添加到文件中:

    html
    <!DOCTYPE html>
    <html>
    <head>
    <title>Welcome to example.com</title>
    </head>
    <body>
    <h1>Success! The example.com server block is working!</h1>
    </body>
    </html>

    保存并关闭文件 (Ctrl+X, Y, Enter)。

  • 5.4 创建服务器块配置文件:

    Nginx 服务器块配置文件通常位于 /etc/nginx/sites-available/ 目录中。为您的网站创建一个新的配置文件:

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

    将以下内容添加到文件中,并根据您的实际情况进行修改:

    “`nginx
    server {
    listen 80;
    listen [::]:80;

    root /var/www/example.com/html;
    index index.html index.htm index.nginx-debian.html;
    
    server_name example.com www.example.com;
    
    location / {
        try_files $uri $uri/ =404;
    }
    

    }
    ``
    *
    listen 80;listen [::]:80;:指定监听的端口。
    *
    root /var/www/example.com/html;:指定网站的根目录。
    *
    index index.html index.htm …;:指定默认的索引文件。
    *
    server_name example.com www.example.com;:指定网站的域名。
    *
    location / { … }:定义如何处理对网站根目录的请求。
    *
    try_files $uri $uri/ =404;` 尝试按顺序查找文件,如果找不到,返回404

    保存并关闭文件。

  • 5.5 启用服务器块:

    要启用服务器块,您需要创建一个从 /etc/nginx/sites-available//etc/nginx/sites-enabled/ 的符号链接:

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

  • 5.6 测试配置:

    在重新加载 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

  • 5.7 设置服务器名称:
    编辑Nginx主配置文件
    bash
    sudo nano /etc/nginx/nginx.conf

    找到 server_names_hash_bucket_size指令。如果前面有#,去掉#
    http {
    ...
    server_names_hash_bucket_size 64;
    ...
    }

    保存并关闭文件,重新加载 Nginx:

    bash
    sudo systemctl reload nginx

    现在,您应该可以通过您的域名访问您的网站了。

6. Nginx 重要文件和目录

了解 Nginx 的重要文件和目录的位置对于配置和故障排除非常有用:

  • 6.1 内容目录:

    • /var/www/html: 默认的网站根目录。您可以在此处放置您的网站文件。
  • 6.2 服务器配置目录:

    • /etc/nginx: Nginx 的主配置目录。
    • /etc/nginx/nginx.conf: Nginx 的主配置文件。
    • /etc/nginx/sites-available/: 包含可用的服务器块配置文件。
    • /etc/nginx/sites-enabled/: 包含已启用的服务器块配置文件的符号链接。
    • /etc/nginx/conf.d/: 可以在此目录中放置其他配置文件。
  • 6.3 服务器日志目录:

    • /var/log/nginx/access.log: 记录所有对服务器的请求。
    • /var/log/nginx/error.log: 记录 Nginx 遇到的错误。

7. Nginx 进阶配置

  • 7.1 配置 HTTPS

    HTTPS(HTTP Secure)通过 SSL/TLS 协议对 HTTP 连接进行加密,提供更安全的通信。

    • 7.1.1 获取 SSL 证书 (Let’s Encrypt)

      Let’s Encrypt 是一个免费的、自动化的、开放的证书颁发机构(CA),可以为您的网站提供免费的 SSL 证书。

      1. 安装 Certbot:

        Certbot 是一个用于自动获取和安装 Let’s Encrypt 证书的工具。

        bash
        sudo apt install certbot python3-certbot-nginx

      2. 获取证书:

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

        example.comwww.example.com 替换为您的域名。Certbot 将自动配置 Nginx 并安装证书。

    • 7.1.2 配置 Nginx 使用 SSL 证书

      Certbot 通常会自动配置 Nginx 使用 SSL 证书。您可以通过检查 /etc/nginx/sites-available/example.com 文件来验证配置。您应该看到类似以下的配置:
      listen 443 ssl; # managed by Certbot
      ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
      ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # managed by Certbot
      include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
      ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

  • 7.2 配置反向代理

    Nginx 可以用作反向代理,将请求转发到后端服务器(例如 Node.js、Python 或 Java 应用程序)。

    “`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;
    }
    

    }
    “`

  • 7.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;
    }
    

    }
    “`

  • 7.4 静态文件优化

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

    nginx
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
    expires 30d; # 缓存 30 天
    add_header Cache-Control "public";
    }

  • 7.5 启用Gzip压缩

Gzip 压缩可以减小 HTTP 响应的大小,从而加快网站加载速度。

“`nginx
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

# 其他配置
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6; #压缩等级,1-9,6是折中选择
gzip_buffers 16 8k;
gzip_http_version 1.1;

“`

8. 常见问题排查

  • 8.1 403 Forbidden 错误

    • 原因: 权限问题。Nginx 用户(通常是 www-data)没有访问网站目录或文件的权限。
    • 解决方法:

      1. 确保网站目录和文件的所有者和组是正确的:

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

      2. 确保网站目录和文件具有正确的权限:

        bash
        sudo chmod -R 755 /var/www/example.com

  • 8.2 502 Bad Gateway 错误

    • 原因: Nginx 无法连接到后端服务器。
    • 解决方法:
      1. 确保后端服务器正在运行。
      2. 检查 Nginx 配置文件中的 proxy_pass 指令是否正确。
      3. 检查后端服务器的防火墙是否允许 Nginx 连接。
  • 8.3 无法访问网站

    • 原因: DNS解析问题, 防火墙, Nginx服务未运行,配置文件错误
    • 解决方法
      1. 确保您的域名已正确解析到服务器的 IP 地址。
      2. 确保防火墙允许 HTTP (80) 和 HTTPS (443) 流量。
      3. 检查 Nginx 服务是否正在运行 (sudo systemctl status nginx)。
      4. 检查nginx配置文件语法是否正确 (sudo nginx -t)
  • 8.4 Nginx 无法启动

    • 原因: 配置文件错误、端口冲突。
    • 解决方法:
      1. 检查 Nginx 配置文件是否存在语法错误 (sudo nginx -t)。
      2. 检查是否有其他进程占用了 80 或 443 端口 (sudo netstat -tulpn | grep :80sudo netstat -tulpn | grep :443)。

9. 总结

本文详细介绍了在 Ubuntu 系统中安装、配置和管理 Nginx 服务器的步骤。您学习了如何安装 Nginx、管理 Nginx 进程、配置防火墙、设置服务器块、配置 HTTPS、反向代理、负载均衡以及一些常见的故障排除方法。通过掌握这些知识,您将能够轻松地部署和管理高性能的 Web 服务器。

请记住,Nginx 的配置非常灵活,可以根据您的具体需求进行定制。建议您阅读 Nginx 官方文档以获取更多信息和高级配置选项。 官方文档链接:https://nginx.org/en/docs/

发表评论

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

滚动至顶部