如何在 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 服务器并开始提供网页服务。

更新于: 2023 年 5 月 12 日

8K+ 次浏览

开启你的 职业生涯

通过完成课程获得认证

立即开始
广告