Nginx 安装与配置教程
Nginx (发音为 “engine-x”) 是一个高性能的 HTTP 和反向代理服务器,同时也是一个邮件代理服务器和通用的 TCP/UDP 代理服务器。它以其卓越的性能、稳定性、丰富的功能集、简单的配置以及低资源消耗而闻名。本文将详细指导您如何在不同的 Linux 系统上安装 Nginx,并进行基础配置,涵盖虚拟主机、反向代理和 SSL/TLS 加密等常见使用场景。
引言
在现代网络架构中,Web 服务器扮演着至关重要的角色。无论是静态网站托管、动态应用服务,还是作为后端服务的入口,一个高效可靠的 Web 服务器都是不可或缺的。Nginx 正是这样一款能够满足这些需求的强大工具,尤其擅长处理高并发连接,使其成为许多大型网站和应用的首选。
第一部分:Nginx 安装
Nginx 的安装过程因操作系统的不同而略有差异。我们将介绍在主流的 Ubuntu/Debian 和 CentOS/RHEL 系统上的安装方法。
在 Ubuntu/Debian 系统上安装 Nginx
Ubuntu 和 Debian 用户可以通过其官方包管理器 apt 轻松安装 Nginx。
-
更新包索引
在安装任何新软件包之前,始终建议更新您的本地包索引,以确保获取最新版本的软件。bash
sudo apt update -
安装 Nginx
执行以下命令安装 Nginx。安装完成后,Nginx 服务通常会自动启动。bash
sudo apt install nginx -
配置防火墙 (UFW)
如果您在系统上启用了 UFW (Uncomplicated Firewall),需要允许 Nginx 的流量通过。- 允许 HTTP (端口 80) 流量:
bash
sudo ufw allow 'Nginx HTTP' - 允许 HTTPS (端口 443) 流量:
bash
sudo ufw allow 'Nginx HTTPS' - 允许 HTTP 和 HTTPS 两种流量:
bash
sudo ufw allow 'Nginx Full' - 如果 UFW 尚未启用,请启用它:
bash
sudo ufw enable - 验证防火墙状态:
bash
sudo ufw status
- 允许 HTTP (端口 80) 流量:
-
检查 Nginx 状态
使用systemctl命令检查 Nginx 服务是否正在运行。bash
sudo systemctl status nginx
您应该会看到active (running)的输出。
在 CentOS/RHEL 系统上安装 Nginx
对于 CentOS 和 RHEL 用户,Nginx 通常不在默认的软件仓库中,因此需要先添加 EPEL (Extra Packages for Enterprise Linux) 仓库。
-
安装 EPEL 仓库
bash
sudo yum install epel-release -y -
安装 Nginx
添加 EPEL 仓库后,即可使用yum安装 Nginx。bash
sudo yum install nginx -y -
启动并启用 Nginx
在 CentOS/RHEL 上,Nginx 安装后不会自动启动。您需要手动启动并设置其在系统启动时自动运行。bash
sudo systemctl start nginx
sudo systemctl enable nginx # 设置 Nginx 开机自启动 -
配置防火墙 (firewalld)
如果您的系统使用firewalld,需要开放 HTTP 和 HTTPS 端口。bash
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload # 重新加载防火墙规则 -
检查 Nginx 状态
同样,使用systemctl检查 Nginx 服务状态。bash
sudo systemctl status nginx
您应该会看到active (running)的输出。
第二部分:Nginx 基础配置
Nginx 的核心配置文件位于 /etc/nginx/nginx.conf。为了更好地组织配置,Nginx 通常会使用 sites-available 和 sites-enabled 目录来管理各个站点的配置。
/etc/nginx/nginx.conf: Nginx 的主配置文件。/etc/nginx/sites-available/: 存放所有可用的站点配置文件。/etc/nginx/sites-enabled/: 存放实际启用站点的配置文件,通常是通过软链接指向sites-available中的文件。
验证安装
安装成功后,您可以通过在 Web 浏览器中输入服务器的 IP 地址或域名来验证 Nginx 是否正常工作。您应该会看到 Nginx 的默认欢迎页面。
第三部分:常见配置案例
Nginx 的强大之处在于其灵活的配置能力。以下是一些常见的配置案例。
配置虚拟主机 (Server Blocks)
虚拟主机 (Nginx 中称为 “server block”) 允许您在同一个服务器上托管多个网站。
-
创建站点目录和
index.html
为您的新网站创建一个根目录,并在其中放置一个index.html文件。将your_domain替换为您的实际域名。bash
sudo mkdir -p /var/www/your_domain/html
sudo nano /var/www/your_domain/html/index.html
在index.html中添加以下内容:
html
<!DOCTYPE html>
<html>
<head>
<title>欢迎来到您的域名!</title>
</head>
<body>
<h1>成功! 您的 Nginx 虚拟主机为 your_domain 正常工作。</h1>
</body>
</html> -
设置文件权限
确保 Nginx 进程有权读取您的网站文件。- 对于 Ubuntu/Debian:
bash
sudo chown -R www-data:www-data /var/www/your_domain/html - 对于 CentOS/RHEL:
bash
sudo chown -R nginx:nginx /var/www/your_domain/html - 设置目录和文件的权限:
bash
sudo chmod -R 755 /var/www/your_domain
- 对于 Ubuntu/Debian:
-
创建服务器块配置文件
在/etc/nginx/sites-available/目录中为您的域名创建一个新的配置文件。bash
sudo nano /etc/nginx/sites-available/your_domain
添加以下配置(将your_domain替换为您的实际域名):
“`nginx
server {
listen 80;
listen [::]:80;root /var/www/your_domain/html; index index.html index.htm; server_name your_domain www.your_domain; location / { try_files $uri $uri/ =404; } error_log /var/log/nginx/your_domain_error.log; access_log /var/log/nginx/your_domain_access.log;}
“` -
启用服务器块
通过创建一个软链接,将sites-available中的配置文件链接到sites-enabled目录。bash
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/ -
测试配置
在应用配置之前,务必测试 Nginx 配置文件的语法是否正确。bash
sudo nginx -t
如果一切正常,您将看到syntax is ok和test is successful。 -
重启 Nginx
应用新的配置需要重启 Nginx 服务。bash
sudo systemctl restart nginx
现在,当您访问http://your_domain时,Nginx 将会提供/var/www/your_domain/html目录下的内容。
Nginx 作为反向代理
Nginx 可以作为反向代理,将客户端请求转发到后端应用程序服务器(例如 Node.js、Python 应用等),从而提高性能、安全性和负载均衡能力。
以下是将所有请求代理到运行在 localhost:3000 上的后端应用的配置示例:
“`nginx
server {
listen 80;
server_name your_domain www.your_domain;
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_set_header X-Forwarded-Proto $scheme;
}
}
“`
测试与重启
修改配置后,同样需要测试配置并重启 Nginx:
bash
sudo nginx -t
sudo systemctl restart nginx
SSL/TLS 配置 (HTTPS)
为您的网站启用 HTTPS 是保护用户数据和提高网站信任度的关键。这通常涉及获取 SSL 证书并配置 Nginx 使用它。
使用自签名证书 (仅用于测试)
在生产环境中,您应该使用来自受信任证书颁发机构 (CA) 的证书,例如 Let’s Encrypt。为了演示目的,我们可以生成一个自签名证书。
-
创建 SSL 证书目录
bash
sudo mkdir -p /etc/nginx/ssl -
生成自签名 SSL 证书和密钥
bash
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx-selfsigned.key -out /etc/nginx/ssl/nginx-selfsigned.crt
在生成过程中,您会被要求输入一些信息;Common Name 通常应填写您的域名。 -
修改服务器块配置以启用 HTTPS
我们将配置两个server块:一个用于处理 HTTP 请求并将其重定向到 HTTPS,另一个用于处理 HTTPS 请求。“`nginx
HTTP 到 HTTPS 的重定向
server {
listen 80;
listen [::]:80;
server_name your_domain www.your_domain;
return 301 https://$server_name$request_uri; # 重定向所有 HTTP 到 HTTPS
}HTTPS 配置
server {
listen 443 ssl http2; # 监听 443 端口,启用 SSL 和 HTTP/2
listen [::]:443 ssl http2;
server_name your_domain www.your_domain;ssl_certificate /etc/nginx/ssl/nginx-selfsigned.crt; # 证书路径 ssl_certificate_key /etc/nginx/ssl/nginx-selfsigned.key; # 私钥路径 ssl_protocols TLSv1.2 TLSv1.3; # 推荐的 TLS 协议版本 ssl_ciphers HIGH:!aNULL:!MD5; # 推荐的加密套件 root /var/www/your_domain/html; index index.html index.htm; location / { try_files $uri $uri/ =404; } error_log /var/log/nginx/your_domain_error.log; access_log /var/log/nginx/your_domain_access.log;}
“` -
测试与重启
bash
sudo nginx -t
sudo systemctl restart nginx
现在,当您访问https://your_domain时,您的浏览器可能会因为自签名证书而发出警告,但连接将是加密的。如果通过 HTTP 访问,则会自动重定向到 HTTPS。
第四部分: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 - 设置 Nginx 开机自启动:
bash
sudo systemctl enable nginx - 禁用 Nginx 开机自启动:
bash
sudo systemctl disable nginx
总结
Nginx 是一个功能强大且灵活的 Web 服务器,通过本文的详细教程,您应该已经掌握了在 Ubuntu/Debian 和 CentOS/RHEL 系统上安装 Nginx 的方法,并学会了如何配置虚拟主机、反向代理以及启用 SSL/TLS 加密。随着您对 Nginx 的使用深入,您会发现它能胜任更多复杂的任务,为您的 Web 服务提供坚实的基础。