在 Linux 上安装 Nginx 的详细步骤
Nginx (发音为 “engine-x”) 是一款高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。它以其稳定性、丰富的功能集、简单的配置和低资源消耗而闻名。许多高流量网站都依赖 Nginx 来提供快速、可靠的内容。
本文将详细介绍在各种主流 Linux 发行版上安装 Nginx 的步骤,包括:
- 使用包管理器安装 (推荐):这是最简单、最常用的方法,适用于大多数用户。我们将涵盖 Ubuntu/Debian、CentOS/RHEL/Fedora 和 openSUSE。
- 从源代码编译安装:这种方法提供了更大的灵活性,允许你自定义 Nginx 的配置和模块,但需要更多的技术知识。
- 安装后的配置和管理:包括启动、停止、重启 Nginx,配置虚拟主机,以及基本的安全设置。
1. 使用包管理器安装 (推荐)
这种方法利用了 Linux 发行版自带的包管理器,简化了安装过程,并确保了软件的兼容性和自动更新。
1.1. Ubuntu/Debian
Ubuntu 和 Debian 使用 apt
包管理器。
-
更新软件包列表:
在安装任何新软件之前,最好先更新本地软件包索引。打开终端并运行以下命令:
bash
sudo apt update -
安装 Nginx:
使用
apt install
命令安装 Nginx:bash
sudo apt install nginx系统将提示你确认安装。输入
y
并按 Enter 键继续。 -
验证安装:
安装完成后,Nginx 服务通常会自动启动。你可以通过以下命令检查其状态:
bash
sudo systemctl status nginx如果看到 “active (running)”,则表示 Nginx 正在运行。
你也可以在浏览器中输入服务器的 IP 地址或域名来访问 Nginx 的默认欢迎页面。如果看到 “Welcome to nginx!” 页面,则表示安装成功。
1.2. CentOS/RHEL/Fedora
CentOS、RHEL 和 Fedora 使用 yum
(CentOS 7 及更早版本) 或 dnf
(CentOS 8 及更高版本,Fedora) 包管理器。
-
更新软件包列表 (可选):
虽然不是必需的,但更新软件包列表通常是一个好习惯:
“`bash
对于 yum (CentOS 7 及更早版本)
sudo yum update
对于 dnf (CentOS 8 及更高版本,Fedora)
sudo dnf update
“` -
安装 Nginx:
使用
yum
或dnf
安装 Nginx:“`bash
对于 yum (CentOS 7 及更早版本)
sudo yum install nginx
对于 dnf (CentOS 8 及更高版本,Fedora)
sudo dnf install nginx
如果安装失败,提示找不到nginx安装包,说明nginx不在默认的yum或dnf仓库中,则先执行下列命令,安装epel仓库:
bash对于 yum (CentOS 7 及更早版本)
sudo yum install epel-release
对于 dnf (CentOS 8 及更高版本,Fedora)
sudo dnf install epel-release
“`
安装完epel仓库,再执行上述安装nginx的命令。系统将提示你确认安装。输入
y
并按 Enter 键继续。 -
启动 Nginx 并设置为开机启动:
安装完成后,你需要手动启动 Nginx,并将其设置为在系统启动时自动启动:
bash
sudo systemctl start nginx
sudo systemctl enable nginx -
验证安装:
与 Ubuntu/Debian 类似,你可以使用以下命令检查 Nginx 的状态:
bash
sudo systemctl status nginx并在浏览器中访问服务器的 IP 地址或域名来验证。
1.3. openSUSE
openSUSE 使用 zypper
包管理器。
-
更新软件包列表:
bash
sudo zypper refresh -
安装 Nginx:
bash
sudo zypper install nginx系统将提示你确认安装。输入
y
并按 Enter 键继续。 -
启动 Nginx 并设置为开机启动:
bash
sudo systemctl start nginx
sudo systemctl enable nginx -
验证安装:
同样,使用
systemctl status nginx
检查状态,并在浏览器中访问服务器来验证。
2. 从源代码编译安装
从源代码编译安装 Nginx 提供了最大的灵活性,允许你自定义 Nginx 的配置和模块。但这种方法需要你对编译过程有一定的了解。
2.1. 准备工作
-
安装依赖项:
在编译 Nginx 之前,你需要安装一些必要的依赖项。这些依赖项可能因你的 Linux 发行版而异。以下是一些常见的依赖项:
- GCC 编译器: 用于编译 C 代码。
- PCRE 库: 用于支持正则表达式。
- zlib 库: 用于支持 gzip 压缩。
- OpenSSL 库 (可选): 用于支持 HTTPS。
你可以使用以下命令安装这些依赖项 (以 Ubuntu/Debian 为例):
bash
sudo apt install build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev libssl-dev对于 CentOS/RHEL/Fedora,可以使用:
bash
sudo yum install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
或者
bash
sudo dnf install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel对于 openSUSE,可以使用:
bash
sudo zypper install gcc pcre-devel zlib-devel openssl-devel -
下载 Nginx 源代码:
访问 Nginx 官方网站 (nginx.org) 下载最新的稳定版源代码包。你可以使用
wget
命令直接下载:bash
wget http://nginx.org/download/nginx-1.25.3.tar.gz # 将版本号替换为最新版本 -
解压源代码包:
使用
tar
命令解压下载的源代码包:bash
tar -xzvf nginx-1.25.3.tar.gz # 将文件名替换为实际的文件名这将创建一个名为
nginx-1.25.3
的目录 (目录名可能因版本而异)。
2.2. 配置和编译
-
进入源代码目录:
bash
cd nginx-1.25.3 # 将目录名替换为实际的目录名 -
配置 Nginx:
使用
./configure
脚本配置 Nginx。你可以使用各种选项来自定义安装,例如:--prefix=PATH
:指定 Nginx 的安装路径 (默认为/usr/local/nginx
)。--sbin-path=PATH
:指定 Nginx 可执行文件的路径。--conf-path=PATH
:指定 Nginx 配置文件的路径。--with-http_ssl_module
:启用 HTTPS 支持。--with-http_v2_module
:启用 HTTP/2 支持。--with-mail
:启用邮件代理功能。--with-stream
:启用 TCP/UDP 流量代理功能。
一个基本的配置示例:
bash
./configure --prefix=/usr/local/nginx --with-http_ssl_module运行
./configure --help
可以查看所有可用的配置选项。 -
编译 Nginx:
运行
make
命令编译 Nginx:bash
make -
安装 Nginx:
运行
make install
命令安装 Nginx:bash
sudo make install
2.3. 启动和管理
从源代码安装的 Nginx 通常不会自动创建 systemd 服务文件。你需要手动创建它们,或者使用 Nginx 提供的初始化脚本。
-
创建 systemd 服务文件 (可选):
创建一个名为
/etc/systemd/system/nginx.service
的文件,并添加以下内容:“`
[Unit]
Description=The Nginx HTTP and reverse proxy server
After=network.target[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid # 根据你的安装路径修改
ExecStartPre=/usr/local/nginx/sbin/nginx -t # 根据你的安装路径修改
ExecStart=/usr/local/nginx/sbin/nginx # 根据你的安装路径修改
ExecReload=/usr/local/nginx/sbin/nginx -s reload # 根据你的安装路径修改
ExecStop=/usr/local/nginx/sbin/nginx -s stop # 根据你的安装路径修改
PrivateTmp=true[Install]
WantedBy=multi-user.target
“`保存文件后,重新加载 systemd 配置:
bash
sudo systemctl daemon-reload现在你可以使用
systemctl
命令来管理 Nginx:bash
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
sudo systemctl status nginx
sudo systemctl enable nginx -
使用 Nginx 初始化脚本 (可选):
Nginx 源代码中通常包含一个名为
nginx.init
的初始化脚本。你可以将其复制到/etc/init.d/
目录,并赋予执行权限:bash
sudo cp nginx.init /etc/init.d/nginx
sudo chmod +x /etc/init.d/nginx然后你可以使用以下命令来管理 Nginx:
bash
sudo /etc/init.d/nginx start
sudo /etc/init.d/nginx stop
sudo /etc/init.d/nginx restart
3. 安装后的配置和管理
无论你使用哪种方法安装 Nginx,安装完成后都需要进行一些基本的配置和管理。
3.1. Nginx 配置文件
Nginx 的主配置文件通常位于以下位置:
- 使用包管理器安装:
- Ubuntu/Debian:
/etc/nginx/nginx.conf
- CentOS/RHEL/Fedora:
/etc/nginx/nginx.conf
- openSUSE:
/etc/nginx/nginx.conf
- Ubuntu/Debian:
- 从源代码编译安装: 默认情况下是
/usr/local/nginx/conf/nginx.conf
,但可以在编译时通过--conf-path
选项指定。
Nginx 的配置文件使用一种简单的、类似 JSON 的语法。以下是一些常见的配置指令:
user
:指定 Nginx 工作进程的用户。worker_processes
:指定 Nginx 工作进程的数量。通常设置为 CPU 核心数。error_log
:指定错误日志文件的路径。pid
:指定 Nginx 主进程的 PID 文件路径。events
:配置事件处理模型。http
:配置 HTTP 服务器。server
:配置虚拟主机。location
:配置 URL 匹配规则。
3.2. 配置虚拟主机
虚拟主机允许你在同一台服务器上托管多个网站。每个虚拟主机都有自己的域名、根目录和配置文件。
-
创建虚拟主机配置文件:
通常,虚拟主机的配置文件位于以下目录:
- Ubuntu/Debian:
/etc/nginx/sites-available/
- CentOS/RHEL/Fedora:
/etc/nginx/conf.d/
- openSUSE:
/etc/nginx/vhosts.d/
创建一个新的配置文件,例如
example.com.conf
(将example.com
替换为你的域名):bash
sudo nano /etc/nginx/sites-available/example.com.conf # Ubuntu/Debian
sudo nano /etc/nginx/conf.d/example.com.conf # CentOS/RHEL/Fedora - Ubuntu/Debian:
-
添加虚拟主机配置:
在配置文件中添加以下内容 (将
example.com
替换为你的域名,并将/var/www/example.com
替换为你的网站根目录):“`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; } # 可选:添加其他配置,例如 SSL、PHP 支持等
}
“` -
启用虚拟主机:
-
Ubuntu/Debian: 创建一个符号链接到
/etc/nginx/sites-enabled/
目录:bash
sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/ -
CentOS/RHEL/Fedora: 配置文件会自动加载。
-
openSUSE 将虚拟主机配置文件放置到
/etc/nginx/vhosts.d/
-
-
测试配置并重启 Nginx:
bash
sudo nginx -t # 测试配置文件语法
sudo systemctl restart nginx # 重启 Nginx
3.3. 基本安全设置
-
防火墙:
确保你的防火墙允许 HTTP (端口 80) 和 HTTPS (端口 443) 流量通过。
-
Ubuntu/Debian (ufw):
bash
sudo ufw allow 'Nginx Full' # 允许 HTTP 和 HTTPS -
CentOS/RHEL/Fedora (firewalld):
bash
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
* openSUSE (firewalld):与CentOS/RHEL/Fedora操作相同。
-
-
SELinux (CentOS/RHEL):
如果启用了 SELinux,你可能需要调整一些设置才能使 Nginx 正常工作。
如果遇到网站访问不了,可以尝试暂时关闭SELinux
bash
setenforce 0 -
隐藏 Nginx 版本号:
在 Nginx 配置文件 (
nginx.conf
) 的http
块中添加以下指令:nginx
server_tokens off;这将隐藏 Nginx 在 HTTP 响应头中显示的版本号,有助于提高安全性。
-
限制访问敏感文件:
在 Nginx 配置文件中添加以下
location
块,禁止访问隐藏文件和目录 (例如.git
、.svn
):nginx
location ~ /\. {
deny all;
}
重新加载nginx的配置,使设置生效。
3.4 常用命令
启动nginx: sudo systemctl start nginx
停止nginx: sudo systemctl stop nginx
重启nginx: sudo systemctl restart nginx
重新加载配置(不中断服务): sudo nginx -s reload
或sudo systemctl reload nginx
测试配置文件: sudo nginx -t
查看nginx进程: ps aux | grep nginx
查看nginx监听端口: netstat -tulnp | grep nginx
或 ss -tulnp | grep nginx
总结
本文详细介绍了在 Linux 上安装 Nginx 的两种方法:使用包管理器和从源代码编译。无论你选择哪种方法,都需要进行一些基本的配置和管理,包括配置虚拟主机和进行基本的安全设置。希望这篇文章能帮助你成功地在你的 Linux 系统上安装和配置 Nginx。如果你有任何问题,请随时提问。