如何在 FreeBSD 11.2 上安装 Nginx

介绍

Nginx是世界上最流行的网页服务器之一,以其频繁的使用为负载平衡器和逆向代理而闻名。

在本指南中,我们将展示如何在 FreeBSD 11.2 服务器上安装 Nginx。

<$>[注] 注: 截至 2022 年 7 月 1 日,DigitalOcean 不再支持通过控制面板或 API 创建新的 FreeBSD Droplets. 但是,您仍然可以使用自定义图像创建 FreeBSD Droplets。

前提条件

在开始本指南之前,您需要访问运行 FreeBSD 的服务器,本指南是专门用运行 FreeBSD 11.2 的服务器来编写的,尽管它也应该在旧版本的操作系统上工作。

如果你是新手使用FreeBSD,你可能会发现通过遵循 这些指令来定制此服务器是有用的。

此外,如果您打算为此服务器设置域名,您将需要以下内容:

  • 您拥有和控制的注册域名. 如果您还没有注册域名,您可以与众多域名注册商之一(例如 Namecheap、GoDaddy 等)注册域名。
  • DNS ** A Record** 将您的域名指向您的服务器的公共 IP 地址。

步骤 1 - 安装 Nginx

首先,我们将使用 FreeBSD 内置的二进制包管理工具 pkg 安装 Nginx. 以下命令将更新您的可用包的本地副本,然后安装 `nginx' 包:

1sudo pkg install nginx

如果这是你第一次运行pkg,它会提示你确认你允许它自行启动。 要做到这一点,请按y,然后按ENTER。 然后,当提示时,请通过按y,然后再次按ENTER,确认你批准安装nginx包。

如果您正在使用cshtcsh壳,请确保运行rehash命令。

1rehash

<$>[注] 注: 如果您不确定当前正在使用的壳,您可以使用以下命令检查:

1echo $SHELL

输出将显示当前使用的 shell 程序的文件路径:

1[secondary_label Output]
2/bin/tcsh

美元

Nginx 现在已安装在您的服务器上,但尚未运行. 在下一步,我们将允许 Nginx 每次启动服务器并启动此会话时启动,以及通过设置 IPFW 防火墙来通过保护服务器的过程。

步骤 2 – 启用 Nginx 服务并使用 IPFW 设置防火墙

为了让 FreeBSD 启动 Nginx 作为传统服务,您必须告诉 FreeBSD 您想要启用它,这将允许您像任何其他服务一样管理它,而不是作为一个独立的应用程序,并且还会配置 FreeBSD 以便在启动时自动启动它。

要做到这一点,你首先需要知道nginx服务的正确rc参数。rc是一个控制系统自动启动过程的FreeBSD实用程序。系统上可用的每个服务的脚本位于/usr/local/etc/rc.d目录中。这些参数定义了使用rcvar变量来启用每个服务的参数。我们可以通过键入查看每个服务的rcvar设置为:

1grep rcvar /usr/local/etc/rc.d/*

安装后,此命令将输出类似于此的列表:

1[secondary_label Output]
2/usr/local/etc/rc.d/cloudconfig:rcvar="cloudinit_enable"
3/usr/local/etc/rc.d/cloudfinal:rcvar="cloudinit_enable"
4/usr/local/etc/rc.d/cloudinit:rcvar="cloudinit_enable"
5/usr/local/etc/rc.d/cloudinitlocal:rcvar="cloudinit_enable"
6/usr/local/etc/rc.d/nginx:rcvar=nginx_enable
7/usr/local/etc/rc.d/rsyncd:rcvar=rsyncd_enable

您需要为nginx服务设置的参数在此输出中被突出说明,脚本本身的名称 - 结肠前路径的最后组成部分 - 也是有用的,因为这就是FreeBSD用来参考该服务的名称。

要启用nginx服务,你必须将其rcvar添加到rc.conf文件中,其中包含由启动脚本引用的全球系统配置信息。 使用您偏好的编辑器来打开具有sudo特权的/etc/rc.conf文件。

1sudo ee /etc/rc.conf

在文件的顶部,将有几个已经存在的rcvar参数. 在这些下方添加nginx_enable``rcvar参数,并将其设置为YES:

1[label /etc/rc.conf]
2. . .
3sshd_enable="YES"
4nginx_enable="YES"
5
6. . .

虽然仍然在rc.conf文件中,我们会添加一些指令来启用和配置IPFW防火墙。 IPFW是为FreeBSD写的国家防火墙,它提供了强大的语法,允许您为大多数用例定制安全规则。

直接在您刚刚添加的「nginx_enable」参数下方,添加以下突出的行:

1[label /etc/rc.conf]
2. . .
3nginx_enable="YES"
4firewall_enable="YES"
5firewall_type="workstation"
6firewall_myservices="22/tcp 80/tcp"
7firewall_allowservices="any"

以下是这些指令和它们的设置所做的事情:

  • firewall_enable="YES" - 将此指令设置为 `YES' - 允许防火墙在服务器启动时启动。
  • firewall_type="workstation" - FreeBSD提供几种默认类型的防火墙,每个都有略有不同的配置。通过声明 workstation`类型,防火墙只会使用状态规则来保护该服务器。
  • firewall_myservices="22/tcp 80/tcp" - 该 'firewall_myservices'指令是您可以列出您希望通过防火墙允许的TCP端口的地方。

添加这些行后,保存文件并关闭编辑器,按CTRL + C,键入退出,然后按ENTER

然后,启动ipfw防火墙服务. 因为这是您第一次在这个服务器上启动防火墙,所以有可能导致您的服务器停滞,使其无法通过SSH访问。

1sudo nohup service ipfw start >/tmp/ipfw.log 2>&1

但是,如果您使用cshtcsh壳,此重定向将导致模糊的输出重定向出现在输出中。

1sudo nohup service ipfw start >&/tmp/ipfw.log

<$>[note] Note :在未来,您可以像任何其他服务一样管理ipfw防火墙,例如,要停止,启动,然后重新启动服务,您将执行以下命令:

1sudo service ipfw stop
2sudo service ipfw start
3sudo service ipfw restart

美元

接下来,开始nginx服务。

1sudo service nginx start

然后,要测试 Nginx 是否能够正确地提供内容,请在您偏好的 Web 浏览器的 URL 栏中输入服务器的公共 IP 地址:

1http://your_server_ip

<$>[note] 注: 如果您不确定您的服务器的公共 IP 地址,您可以运行以下命令,该命令将打印您的服务器的 IP 地址,从互联网上的另一个位置看到:

1curl -4 icanhazip.com

美元

如果一切正常运行,您将看到默认的 Nginx 定位页面:

Nginx default page

这表明 Nginx 是正确安装和运行的,它正在被允许通过防火墙,如预期. 尽管如此,仍有几个配置更改需要进行,以便它可以使用非默认设置或使用域名服务内容。

步骤三:设置服务器封锁

在使用 Nginx 网页服务器时,可使用 _server blocks (类似于 Apache 中的虚拟主机) 来封装配置细节,并从单个服务器中托管多个域。

在 FreeBSD 11.2 上, Nginx 默认允许一个服务器块,该服务器配置为从 /usr/local/www/nginx 中的目录中提供文档。 虽然这对单个网站非常有效,但如果您托管多个网站,它可能会变得不便。

创建 example.com 的目录如下,使用-p旗帜创建任何必要的母目录:

1sudo mkdir -p /usr/local/www/example.com/html

接下来,将目录的所有权分配给 www 用户,即默认的 Nginx 运行时间用户配置文件:

1sudo chown -R www:www /usr/local/www/example.com

如果您尚未修改mask值,您的 Web 根的权限应该是正确的,但您可以通过键入来确保:

1sudo chmod -R 755 /usr/local/www/example.com

接下来,使用ee创建一个样本index.html页面:

1sudo ee /usr/local/www/example.com/html/index.html

内部,添加以下样本HTML:

1[label /usr/local/www/example.com/html/index.html]
2<html>
3    <head>
4        <title>Welcome to Example.com!</title>
5    </head>
6    <body>
7        <h1>Success!  The example.com server block is working!</h1>
8    </body>
9</html>

保存并关闭文件,当你完成。

为了使 Nginx 能够提供此内容,必须创建一个正确的服务器块。 打开主要的 Nginx 配置文件。 默认情况下,这是在 /usr/local/etc/nginx/ 目录中进行的:

1sudo ee /usr/local/etc/nginx/nginx.conf

<$>[note] Note :一般来说,你想避免编辑默认的nginx.conf文件,但是,在同一个目录中,有一个名为nginx.conf-dist的文件,它与默认的nginx.conf文件相同。

1sudo cp /usr/local/etc/nginx/nginx.conf-dist /usr/local/etc/nginx/nginx.conf

美元

当您第一次打开文件时,您将在顶部看到以下内容:

1[label /usr/local/etc/nginx/nginx.conf]
2#user nobody;
3worker_processes 1;
4
5. . .

通过删除英镑符号(‘# ’),然后将用户从 nobody 更改为 ** www** ,然后更新worker_processes指令,允许您选择 Nginx 将使用多少个工人流程。

1[label /usr/local/etc/nginx/nginx.conf]
2user www;
3worker_processes auto;
4. . .

然后滚到服务器块,所有评论都被删除,它将看起来像这样:

 1[label /usr/local/etc/nginx/nginx.conf]
 2. . .
 3    server {
 4        listen 80;
 5        server_name localhost;
 6
 7        location / {
 8            root   /usr/local/www/nginx;
 9            index index.html index.htm;
10        }
11
12        error_page 500 502 503 504  /50x.html;
13
14        location = /50x.html {
15            root   /usr/local/www/nginx-dist;
16        }
17    }

删除整个服务器块,包括所有被评论的行,并用以下内容取代它:

 1[label /usr/local/etc/nginx/nginx.conf]
 2. . .
 3    server {
 4        access_log /var/log/nginx/example.com.access.log;
 5        error_log /var/log/nginx/example.com.error.log;
 6        listen 80;
 7        server_name example.com www.example.com;
 8
 9        location / {
10            root   /usr/local/www/example.com/html;
11            index index.html index.htm;
12        }
13    }
14. . .

以下是该服务器块中的指令所做的:

  • access_log:本指令定义了服务器的访问日志的位置。
  • error_log: 这定义了 Nginx 会写错误日志的文件。
  • 倾听:‘倾听’指令声明了哪个端口 Nginx 应该倾听。在这种情况下,我们将其设置为 80,以便它可以倾听 HTTP 流量。
  • server_name:在这里,指向 Nginx 到您的域名和您所拥有的任何代码。 如果您没有域名,指向 Nginx 到您的服务器的公共 IP 地址。
  • root:这定义了您在此步骤中创建的文件根。

总之,随着评论被删除,文件将看起来像这样:

 1[label /usr/local/letc/nginx/nginx.conf]
 2user www;
 3worker_processes 1;
 4
 5events {
 6    worker_connections 1024;
 7}
 8
 9http {
10    include mime.types;
11    default_type application/octet-stream;
12    sendfile on;
13    keepalive_timeout 65;
14
15    server {
16        access_log /var/log/nginx/example.com.access.log;
17        error_log /var/log/nginx/example.com.error.log;
18        listen 80;
19        server_name example.com www.example.com;
20
21        location / {
22            root   /usr/local/www/example.com;
23            index index.html index.htm;
24        }
25
26    }
27
28}

完成后,保存并关闭文件,然后通过键入测试配置文件的语法错误:

1sudo nginx -t

如果您的配置文件没有可检测的语法错误,您将看到以下输出:

1[secondary_label Output]
2nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
3nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful

如果上述命令包含错误,请重新打开 Nginx 配置文件到错误被发现的位置,并尝试修复问题。

当您的配置检查正确时,继续运行并重新加载nginx服务以启用您的更改:

1sudo service nginx reload

Nginx 现在应该为您在 index.html 文件中设置的内容提供服务. 通过导航到 http://example.com 来测试此功能,您应该看到这样的内容:

Nginx first server block

作为最后一步,我们将讨论一些允许您管理 Nginx 服务的命令。

步骤 4 – 管理 Nginx 流程

现在你有你的Web服务器运行,让我们审查一些基本的管理命令。

要停止您的 Web 服务器,键入:

1sudo service nginx stop

要在停止时启动 Web 服务器,键入:

1sudo service nginx start

要停止,然后重新启动服务,键入:

1sudo service nginx restart

如果您只是在进行配置更改,您可以重新加载 Nginx,而不会放弃任何连接。

1sudo service nginx reload

最后,回想一下,在步骤2中,我们如何通过将nginx_enable="YES"指令添加到rc.conf文件中来启用nginx服务,如果你想禁用nginx服务,以防止服务器启动时启动,你需要重新打开该文件并删除该行。

结论

从这里,您可以通过启用 HTTPS 来加密您的服务器的 Web 流量. 要了解如何做到这一点,请参阅 How To Secure Nginx with Let's Encrypt on FreeBSD

Published At
Categories with 技术
Tagged with
comments powered by Disqus