介绍
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
包。
如果您正在使用csh
或tcsh
壳,请确保运行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
但是,如果您使用csh
或tcsh
壳,此重定向将导致模糊的输出重定向
出现在输出中。
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 是正确安装和运行的,它正在被允许通过防火墙,如预期. 尽管如此,仍有几个配置更改需要进行,以便它可以使用非默认设置或使用域名服务内容。
步骤三:设置服务器封锁
在使用 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 服务的命令。
步骤 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。