如何在 CentOS 7 上安装和配置 Nginx?
Nginx 是一种流行的 Web 服务器,以其高性能、可扩展性和低资源占用而闻名。它通常用作反向代理、负载均衡器和 HTTP 缓存。在本文中,我们将讨论如何在 CentOS 7 上安装和配置 Nginx。
第1步:更新系统
在我们开始安装任何软件包之前,必须将系统更新到最新版本。为此,请运行以下命令 -
sudo yum update
第2步:安装Nginx
系统更新后,我们就可以继续安装Nginx了。我们可以使用以下命令安装 Nginx -
sudo yum install nginx
安装过程将开始,系统将提示您输入“y”并按 Enter 键确认安装。
步骤 3:启动 Nginx 并使其开机启动
安装完成后,我们可以通过运行以下命令来启动 Nginx 服务 -
sudo systemctl start nginx
要使 Nginx 在启动时自动启动,请运行以下命令 -
sudo systemctl enable nginx
步骤 4:配置防火墙以允许 Nginx 流量
默认情况下,CentOS 7 启用了防火墙。我们需要允许 HTTP 流量通过防火墙访问 Web 服务器。我们可以使用以下命令允许 HTTP 流量 -
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload
第5步:测试Nginx安装
现在我们已经安装并配置了 Nginx,我们可以通过在 Web 浏览器中访问 Web 服务器的 IP 地址来测试它。在网络浏览器中,输入以下内容 -
http://your_server_ip_address/
如果一切配置正确,您应该看到默认的 Nginx 页面。
第6步:配置Nginx
默认的 Nginx 配置文件位于 /etc/nginx/nginx.conf。在对配置文件进行任何更改之前,我们需要通过运行以下命令对其进行备份 -
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
现在我们已经备份了配置文件,我们可以使用我们选择的文本编辑器编辑原始文件。在此示例中,我们将使用 Nano 文本编辑器 -
sudo nano /etc/nginx/nginx.conf
Nginx 主配置文件分为几个块,包括 http、server 和 location 块。 http 块是主要配置块,包含 Web 服务器的全局设置。
对配置文件进行任何更改后,您必须使用以下命令测试配置文件是否存在语法错误 -
sudo nginx -t
如果没有语法错误,您可以使用以下命令重新加载 Nginx 配置 -
sudo systemctl reload nginx
第7步:配置虚拟主机
Nginx 允许我们配置虚拟主机,用于在同一服务器上为不同的网站或应用程序提供服务。要创建虚拟主机,我们需要在 Nginx 配置文件中创建一个新的服务器块。
首先,我们需要为虚拟主机创建一个新的配置文件 -
sudo nano /etc/nginx/conf.d/example.com.conf
在此文件中,我们可以为虚拟主机添加服务器块,其中将包含我们网站的配置设置。例如 -
server {
listen 80;
server_name example.com;
root /var/www/example.com;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
在此示例中,我们为域名为 example.com 的网站配置虚拟主机。 root 指令指定网站的文档根目录,index 指令指定要提供的默认索引文件。
位置块指定与特定 URL 或 URL 模式匹配的请求的配置设置。在本例中,我们使用 try_files 指令尝试提供请求的文件或目录,如果不存在,则提供 index.html 文件。
添加虚拟主机的配置后,我们需要测试配置文件是否存在语法错误 -
sudo nginx -t
如果没有语法错误,我们可以重新加载 Nginx 配置以应用更改 -
sudo systemctl reload nginx
步骤 8:使用 SSL/TLS 证书启用 HTTPS
为了使用 HTTPS 保护我们的网站,我们需要从受信任的证书颁发机构 (CA) 获取 SSL/TLS 证书。我们可以使用 Certbot 工具从 Let's Encrypt 获取免费的 SSL/TLS 证书。
首先,我们需要安装 Certbot 工具 -
sudo yum install certbot python2-certbot-nginx
接下来,我们可以运行以下命令来为我们的虚拟主机获取并安装 SSL/TLS 证书 -
sudo certbot --nginx -d example.com
此命令将自动从 Let's Encrypt 获取证书并配置 Nginx 以将其用于我们的虚拟主机。
获得证书后,我们需要配置Nginx将所有HTTP流量重定向到HTTPS。我们可以通过将以下服务器块添加到我们的虚拟主机配置中来做到这一点 -
server {
listen 80;
server_name example.com;
return 301 https://$server_name$request_uri;
}
此服务器块将使用 301 重定向将所有 HTTP 流量重定向到 HTTPS。
第9步:启用Nginx将请求代理到应用程序服务器
Nginx 通常用作反向代理服务器,在多个应用程序服务器之间分配流量。这可以提高 Web 应用程序的性能和可扩展性。
为了使 Nginx 能够代理对应用程序服务器的请求,我们需要在 Nginx 配置文件中创建一个新的服务器块来定义上游服务器。
upstream app_servers {
server 10.0.0.1:8000;
server 10.0.0.2:8000;
}
在此示例中,我们定义一个名为 app_servers 的上游组,其中包含两个 IP 地址分别为 10.0.0.1 和 10.0.0.2 的应用程序服务器,侦听端口 8000。
接下来,我们可以在 Nginx 配置文件中添加一个新的服务器块,该文件将请求代理到上游服务器 -
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://app_servers;
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_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}
在此示例中,我们将 Nginx 配置为将请求代理到 app_servers 组中定义的上游服务器。 proxy_pass 指令指定要将请求转发到的 URL,而 proxy_set_header 指令则为转发的请求添加额外的标头。
第10步:使用Systemd监控Nginx
Systemd 是 Linux 的系统和服务管理器,提供了一系列用于管理服务的工具,包括 Nginx。我们可以使用systemd来监控Nginx服务并查看其状态和日志。
要查看 Nginx 服务的状态,请运行以下命令 -
sudo systemctl status nginx
此命令将显示 Nginx 服务的当前状态,包括它是否正在运行、任何错误或警告以及自上次启动或重新启动以来的时间。
要查看 Nginx 服务的日志,请运行以下命令 -
sudo journalctl -u nginx
此命令将显示 Nginx 服务的日志,包括任何错误、警告或信息性消息。
我们还可以使用以下命令实时跟踪 Nginx 日志 -
sudo journalctl -u nginx -f
该命令将实时显示生成的 Nginx 日志,使我们能够更密切地监控服务。
步骤 11:将 Nginx 配置为负载均衡器
Nginx 最常见的用途之一是用作负载均衡器。在此配置中,Nginx 将传入请求分发到多个后端服务器,为 Web 应用程序提供高可用性和可扩展性。
要将 Nginx 配置为负载均衡器,我们需要创建一个包含后端服务器的 IP 地址或主机名的上游组 -
upstream backend_servers {
server 10.0.0.1:8000;
server 10.0.0.2:8000;
}
在此示例中,我们定义一个名为 backend_servers 的上游组,其中包含两个 IP 地址分别为 10.0.0.1 和 10.0.0.2 的后端服务器,监听端口 8000。
接下来,我们可以将一个新的服务器块添加到定义负载平衡配置的 Nginx 配置文件中 -
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend_servers;
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_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
# Load balancing configuration
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
proxy_buffering off;
proxy_http_version 1.1;
# Load balancing algorithm
# Options: round-robin, least_conn, ip_hash
# Default: round-robin
proxy_set_header X-Nginx-Upstream-LB-Method least_conn;
}
}
在此示例中,我们使用 proxy_pass 指令将请求转发到 backend_servers 组中定义的后端服务器。我们还使用 proxy_set_header 指令向转发的请求添加额外的标头。
结论
Nginx 是一款出色的 Web 服务器,具有高性能、可扩展性和低资源使用率。在本文中,我们讨论了如何在 CentOS 7 上安装和配置 Nginx。通过上述步骤,您应该能够设置基本的 Nginx Web 服务器并开始提供网页服务。