CentOS-7-安装配置-Nginx-服务
CentOS 7 安装&配置 Nginx 服务
CentOS 7 安装&配置 Nginx 服务
本教程详细介绍了在 CentOS 7 上安装、配置及验证 Nginx 的标准流程,旨在帮助用户快速部署并运行一个 Web 服务器。
第一步:添加 EPEL 源
EPEL (Extra Packages for Enterprise Linux) 是一个由 Fedora 社区创建和维护的软件源,为 RHEL/CentOS 等企业级 Linux 发行版提供高质量的附加软件包。
sudo yum install epel-release
第二步:安装 Nginx
现在 EPEL 源已经可用,可以使用 yum
命令安装 Nginx:
sudo yum install nginx
第三步:启动 Nginx 服务
安装完成后,使用以下命令启动 Nginx 服务:
sudo systemctl start nginx
第四步:设置 Nginx 开机自启 (可选)
如果希望在服务器重启后 Nginx 服务能够自动启动,可以运行以下命令:
sudo systemctl enable nginx
第五步:配置防火墙 (如果需要)
如果 CentOS 7 服务器开启了防火墙,需要允许 HTTP 和 HTTPS 流量,以便外部用户可以访问网站。
运行以下命令来开放 80 (HTTP) 和 443 (HTTPS) 端口:
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
检查端口是否开放
可以使用以下命令来检查防火墙规则,确认端口是否已成功开放:
sudo firewall-cmd --list-all
执行此命令后,查看输出中的 services
部分。如果看到 http
和 https
,则表示端口已在防火墙中开放。
第六步:验证安装
有多种方法可以验证 Nginx 是否已成功安装并运行:
1. 检查 Nginx 服务状态
运行以下命令查看 Nginx 服务的状态:
sudo systemctl status nginx
如果 Nginx 正在运行,应该会看到 “active (running)” 的绿色字样。
2. 在浏览器中访问服务器 IP
获取服务器 IP 地址:
可以使用以下命令之一来获取服务器的 IP 地址:hostname -I
或者
ip addr show
在浏览器中访问:
打开网页浏览器,然后在地址栏中输入http://<服务器IP地址>
。如果看到 Nginx 的欢迎页面(通常会显示 “Welcome to nginx!”),则说明 Nginx 已成功安装并正在运行。
完成以上步骤后,Nginx 服务器就已经准备就绪了。
第七步:配置 Nginx 托管网站
当 Nginx 安装并运行后,可以将网站文件放置在 Nginx 的根目录中。对于管理单个网站,可以直接使用默认配置。但如果计划托管多个网站,最佳实践是为每个网站创建独立的配置文件。
场景一:托管单个网站 (使用默认配置)
默认根目录:
在 CentOS 7 上,Nginx 的默认网站根目录通常是:/usr/share/nginx/html
所看到的 “Welcome to nginx!” 欢迎页面就是由这个目录下的
index.html
文件生成的。如何发布网站:
可以直接将网站文件(例如index.html
,styles.css
,scripts.js
等)上传或复制到/usr/share/nginx/html
目录下,替换掉默认的欢迎页面。如何查找或修改根目录:
网站的根目录是在 Nginx 的配置文件中定义的。在标准的 CentOS 7 安装中,这个配置通常直接在主配置文件里。- 主配置文件:Nginx 的主配置文件位于
/etc/nginx/nginx.conf
。 - 默认配置位置:打开该文件,会找到一个
http
块,其中包含一个默认的server
块。这个server
块定义了监听 80 端口的 Web 服务器的行为。
一个典型的默认
server
块如下所示:server { listen 80; listen [::]:80; server_name _; root /usr/share/nginx/html; # <--- 这里定义了网站的根目录 # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; error_page 404 /404.html; location = /404.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } }
- 定位根目录:如上所示,
root /usr/share/nginx/html;
这一行明确指定了网站文件的存放位置。 - 关于
conf.d
目录:虽然/etc/nginx/conf.d
目录在初始安装后可能是空的,但它是用来存放不同网站(虚拟主机)的独立配置文件的推荐位置。当需要托管多个网站时,可以在这里为每个网站创建一个.conf
文件。我们将在下一个场景中详细介绍。
如果想更改网站的根目录,可以修改
root
指令后面的路径,然后重新加载 Nginx 配置以使更改生效:sudo systemctl reload nginx
- 主配置文件:Nginx 的主配置文件位于
场景二:托管多个网站 (推荐)
为了更好地管理多个网站(也称为“虚拟主机”),推荐在 /etc/nginx/conf.d/
目录下为每个网站创建一个独立的 .conf
配置文件。主配置文件 /etc/nginx/nginx.conf
默认会加载这个目录下的所有 .conf
文件。
以下是如何为新网站 my-example-site.com
创建配置的步骤:
1. 为网站创建根目录
首先,为新网站创建一个存放文件的目录。一个常见的做法是放在 /var/www/
下:
sudo mkdir -p /var/www/my-example-site.com/html
2. 创建一个示例页面
在新目录中创建一个简单的 index.html
文件用于测试:
echo '<h1>欢迎来到 My Example Site!</h1>' | sudo tee /var/www/my-example-site.com/html/index.html
3. 创建 Nginx 配置文件
在 /etc/nginx/conf.d/
目录下为网站创建一个新的配置文件。文件名最好以 .conf
结尾,例如 my-example-site.com.conf
:
sudo vi /etc/nginx/conf.d/my-example-site.com.conf
4. 编辑配置文件
在打开的编辑器中,粘贴以下内容。这是一个基本的服务器块(server
block)配置:
server {
listen 80;
server_name my-example-site.com www.my-example-site.com; # 网站域名
location / {
root /var/www/my-example-site.com/html; # 网站文件根目录
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
listen 80;
: 监听标准的 HTTP 端口。server_name
: 网站域名。可以列出多个,用空格隔开。root
: 指向在第一步中创建的网站文件根目录。index
: 定义默认的索引文件。
保存并关闭文件。
5. 测试 Nginx 配置
在应用更改之前,务必检查 Nginx 配置是否存在语法错误:
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
如果测试成功,重新加载 Nginx 服务以使新配置生效:
sudo systemctl reload nginx
7. 调整 SELinux 安全上下文 (重要)
在 CentOS 7 上,默认启用的 SELinux 会阻止 Nginx 访问非标准目录(如 /var/www/
)下的文件,这通常会导致 403 Forbidden
错误。在访问网站前,需要为网站目录设置正确的安全上下文。
检查当前上下文:
运行以下命令查看目录的 SELinux 上下文:ls -dZ /var/www/my-example-site.com/html
如果输出中包含
var_t
(例如unconfined_u:object_r:var_t:s0
),则说明上下文不正确,需要修复。修复上下文:
使用restorecon
命令来恢复正确的默认上下文 (httpd_sys_content_t
):sudo restorecon -Rv /var/www/my-example-site.com
现在,新网站已经配置完成。如果将域名 my-example-site.com
解析到服务器 IP,通过浏览器访问该域名时,将看到 “欢迎来到 My Example Site!” 的页面。
常见问题:为什么通过 IP 访问会显示我的网站而不是 Nginx 欢迎页?
这是一个在配置多个虚拟主机时非常常见的问题。
问题现象:
当按照“场景二”配置了 my-example-site.com
之后,发现通过服务器 IP 地址访问时,显示的不再是 Nginx 的默认欢迎页面,而是 my-example-site.com
的网站内容。
原因解析:默认服务器 (Default Server)
当 Nginx 收到一个无法匹配任何 server_name
的请求时(例如,通过 IP 地址直接访问),它会把这个请求交给该端口的默认服务器处理。
Nginx 判断默认服务器的规则如下:
- 显式指定:在
listen
指令后明确添加default_server
参数的server
块会成为默认服务器。例如:listen 80 default_server;
。 - 隐式规则:如果没有任何
server
块显式指定default_server
,那么 Nginx 会将配置文件中第一个被加载的监听该端口的server
块作为默认服务器。
在上述场景中,由于 /etc/nginx/conf.d/my-example-site.com.conf
被加载,并且它的 server
块成为了处理 80 端口的第一个 server
块,因此它被隐式地当成了默认服务器。
解决方案:明确指定默认服务器
为了让 /etc/nginx/nginx.conf
中的 server
块(即显示 Nginx 欢迎页的那个)始终作为处理 IP 访问和未匹配域名的默认服务器,需要修改主配置文件,明确地告诉 Nginx 它的“默认”身份。
编辑主配置文件:
打开/etc/nginx/nginx.conf
文件。修改
listen
指令:
找到默认的server
块,将其中的listen
指令修改为如下内容,在后面加上default_server
标志:# /etc/nginx/nginx.conf server { listen 80 default_server; listen [::]:80 default_server; server_name _; root /usr/share/nginx/html; # ... 其他配置 ... }
测试并重载 Nginx:
保存文件后,执行以下命令来检查配置并使其生效:sudo nginx -t sudo systemctl reload nginx
完成修改后,Nginx 的行为就会和预期一致:
- 访问
http://my-example-site.com
→ 由my-example-site.com.conf
处理。 - 访问
http://<服务器IP地址>
→ 由/etc/nginx/nginx.conf
中指定的默认服务器处理,显示 Nginx 欢迎页面。