如何在 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 地址来测试它。在 Web 浏览器中,输入以下内容:
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 指令指定要提供的默认索引文件。
location 块指定与特定 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 服务器并开始提供网页服务。