在 Ubuntu 系统中安装 Nginx 服务器的详细步骤
Nginx 是一款高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。它以其稳定性、丰富的功能集、简单的配置文件和低系统资源消耗而闻名。在 Ubuntu 系统中安装 Nginx 非常简单,本文将详细介绍安装过程的每一个步骤,并提供一些配置和管理 Nginx 的实用技巧。
文章目录
-
准备工作
- 1.1 系统要求
- 1.2 更新软件包列表
- 1.3 具有 sudo 权限的用户
-
安装 Nginx
- 2.1 使用 apt 包管理器安装
- 2.2 验证安装
-
管理 Nginx 进程
- 3.1 启动 Nginx
- 3.2 停止 Nginx
- 3.3 重启 Nginx
- 3.4 重新加载配置
- 3.5 查看 Nginx 状态
- 3.6 开机自启
-
配置防火墙 (UFW)
- 4.1 查看可用应用配置
- 4.2 允许 Nginx Full 流量
- 4.3 允许 Nginx HTTP 流量 (80 端口)
- 4.4 允许 Nginx HTTPS 流量 (443 端口)
- 4.5 验证防火墙状态
-
配置 Nginx 服务器块 (Server Blocks)
- 5.1 服务器块的作用
- 5.2 创建网站目录
- 5.3 创建示例 HTML 文件
- 5.4 创建服务器块配置文件
- 5.5 启用服务器块
- 5.6 测试配置
- 5.7 设置服务器名称
-
Nginx 重要文件和目录
- 6.1 内容目录
- 6.2 服务器配置目录
- 6.3 服务器日志目录
-
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 压缩
- 7.1 配置 HTTPS
-
常见问题排查
- 8.1 403 Forbidden 错误
- 8.2 502 Bad Gateway 错误
- 8.3 无法访问网站
- 8.4 Nginx 无法启动
-
总结
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此命令将执行以下操作:
- 从 Ubuntu 软件仓库下载 Nginx 软件包及其依赖项。
- 自动安装 Nginx 并创建必要的系统用户和组。
- 启动 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
替换为您的网络接口名称(例如ens3
、enp0s3
等)。
-
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 证书。
-
安装 Certbot:
Certbot 是一个用于自动获取和安装 Let’s Encrypt 证书的工具。
bash
sudo apt install certbot python3-certbot-nginx -
获取证书:
bash
sudo certbot --nginx -d example.com -d www.example.com将
example.com
和www.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
)没有访问网站目录或文件的权限。 -
解决方法:
-
确保网站目录和文件的所有者和组是正确的:
bash
sudo chown -R www-data:www-data /var/www/example.com -
确保网站目录和文件具有正确的权限:
bash
sudo chmod -R 755 /var/www/example.com
-
- 原因: 权限问题。Nginx 用户(通常是
-
8.2 502 Bad Gateway 错误
- 原因: Nginx 无法连接到后端服务器。
- 解决方法:
- 确保后端服务器正在运行。
- 检查 Nginx 配置文件中的
proxy_pass
指令是否正确。 - 检查后端服务器的防火墙是否允许 Nginx 连接。
-
8.3 无法访问网站
- 原因: DNS解析问题, 防火墙, Nginx服务未运行,配置文件错误
- 解决方法
- 确保您的域名已正确解析到服务器的 IP 地址。
- 确保防火墙允许 HTTP (80) 和 HTTPS (443) 流量。
- 检查 Nginx 服务是否正在运行 (
sudo systemctl status nginx
)。 - 检查nginx配置文件语法是否正确 (
sudo nginx -t
)
-
8.4 Nginx 无法启动
- 原因: 配置文件错误、端口冲突。
- 解决方法:
- 检查 Nginx 配置文件是否存在语法错误 (
sudo nginx -t
)。 - 检查是否有其他进程占用了 80 或 443 端口 (
sudo netstat -tulpn | grep :80
或sudo netstat -tulpn | grep :443
)。
- 检查 Nginx 配置文件是否存在语法错误 (
9. 总结
本文详细介绍了在 Ubuntu 系统中安装、配置和管理 Nginx 服务器的步骤。您学习了如何安装 Nginx、管理 Nginx 进程、配置防火墙、设置服务器块、配置 HTTPS、反向代理、负载均衡以及一些常见的故障排除方法。通过掌握这些知识,您将能够轻松地部署和管理高性能的 Web 服务器。
请记住,Nginx 的配置非常灵活,可以根据您的具体需求进行定制。建议您阅读 Nginx 官方文档以获取更多信息和高级配置选项。 官方文档链接:https://nginx.org/en/docs/