如何在FreeBSD 11.2上安装Nginx

Nginx是世界上最受欢迎的Web服务器之一,因其频繁用作负载均衡器和反向代理而闻名。互联网上许多规模最大,交易量最大的网站依赖于Nginx,至少部分原因在于其资源友好性。 在本指南中,我们将演示如何在FreeBSD 11.2服务器上安装Nginx。

介绍

Nginx是世界上最受欢迎的Web服务器之一,以其经常用作负载均衡器和反向代理而闻名。 它比Apache更具资源友好性,互联网上许多规模最大,流量最高的网站都依赖于Nginx来提供内容。

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

先决条件

在开始本指南之前,您需要访问运行FreeBSD的服务器。 本指南专门针对运行FreeBSD 11.2的服务器编写,尽管它也适用于较旧的受支持版本的操作系统。

如果您不熟悉使用FreeBSD,您可能会发现按照这些说明自定义此服务器会很有帮助。

此外,如果您计划为此服务器设置域名,则需要以下内容:

  • 您拥有并控制的注册域名。 如果您还没有注册域名,可以在那里注册一个域名注册商之一(例如Namecheap,GoDaddy等)。
  • DNS A记录 ,将您的域指向服务器的公共IP地址。 您可以按照此主机名教程获取有关如何添加它们的详细信息。

第1步 - 安装Nginx

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

sudo pkg install nginx

如果这是您第一次运行pkg ,它将提示您确认是否允许它自行引导。 为此,请按y ,然后按ENTER 然后,在出现提示时,按y再确认您批准安装nginx软件包,然后再次按ENTER

如果您使用的是cshtcsh shell,请确保运行rehash命令。 这使shell知道您安装的新应用程序:

rehash

注意:如果您不确定当前使用的是哪个shell,可以使用以下命令进行检查:

echo $SHELL

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

/bin/tcsh

Nginx现已安装在您的服务器上,但尚未运行。 在下一步中,我们将使Nginx在每次服务器启动时开始运行并为此会话启动它,并通过使用IPFW设置防火墙来完成保护服务器的过程。

第2步 - 启用Nginx服务并使用IPFW设置防火墙

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

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

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

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

/usr/local/etc/rc.d/cloudconfig:rcvar="cloudinit_enable"
/usr/local/etc/rc.d/cloudfinal:rcvar="cloudinit_enable"
/usr/local/etc/rc.d/cloudinit:rcvar="cloudinit_enable"
/usr/local/etc/rc.d/cloudinitlocal:rcvar="cloudinit_enable"
/usr/local/etc/rc.d/nginx:rcvar=nginx_enable
/usr/local/etc/rc.d/rsyncd:rcvar=rsyncd_enable

此输出中将突出显示您需要为nginx服务设置的参数。 脚本本身的名称 - 冒号之前路径的最后一个组件 - 也有助于了解,因为这是FreeBSD用于引用服务的名称。

要启用nginx服务,必须将其rcvar添加到rc.conf文件中,该文件包含启动脚本引用的全局系统配置信息。 使用首选编辑器以sudo权限打开/etc/rc.conf文件。 在这里,我们将使用ee

sudo ee /etc/rc.conf

在文件的顶部,将会有一些rcvar参数。 在这些下面添加nginx_enable rcvar参数并将其设置为"YES"

在/etc/rc.conf
. . .
sshd_enable="YES"
nginx_enable="YES"

. . .

rc.conf文件中,我们将添加一些指令来启用和配置IPFW防火墙。 IPFW是为FreeBSD编写的状态防火墙。 它提供了强大的语法,允许您为大多数用例自定义安全规则。

在您刚刚添加的nginx_enable参数的正下方,添加以下突出显示的行:

在/etc/rc.conf
. . .
nginx_enable="YES"
firewall_enable="YES"
firewall_type="workstation"
firewall_myservices="22/tcp 80/tcp"
firewall_allowservices="any"

以下是每个指令及其设置的作用:

  • firewall_enable="YES" - 将此指令设置为"YES"使防火墙能够在服务器引导时启动。
  • firewall_type="workstation" - FreeBSD提供了几种默认类型的防火墙,每种防火墙的配置略有不同。 通过声明workstation类型,防火墙将仅使用有状态规则来保护此服务器。
  • firewall_myservices="22/tcp 80/tcp" - 您可以在firewall_myservices指令中列出要通过防火墙允许的TCP端口。 在此示例中,我们分别指定端口2280以允许对服务器的SSH和HTTP访问。
  • firewall_allowservices="any" - 这允许来自任何IP地址的计算机通过firewall_myservices指令中指定的端口进行通信。

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

然后,启动ipfw防火墙服务。 因为这是您第一次在此服务器上启动防火墙,所以这样做有可能导致服务器停止运行,使其无法通过SSH访问。 以下nohup命令 - 代表“no hangups” - 将启动防火墙,同时防止停止并将标准输出和错误重定向到临时日志文件:

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

但是,如果您使用的是cshtcsh shell,则此重定向将导致Ambiguous output redirect. 出现在您的输出中。 如果您正在使用这些shell中的任何一个,请运行以下命令以启动ipfw

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

注意 :将来,您可以像管理任何其他服务一样管理ipfw防火墙。 例如,要停止,启动,然后重新启动服务,您将运行以下命令:

sudo service ipfw stop
sudo service ipfw start
sudo service ipfw restart

接下来,启动nginx服务

sudo service nginx start

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

http://your_server_ip

注意:如果您不确定服务器的公共IP地址,可以运行以下命令打印服务器的IP地址,如从Internet上的其他位置所示:

curl -4 icanhazip.com

如果一切正常,您将看到默认的Nginx登录页面:

Nginx默认页面

这表明Nginx已正确安装并正常运行,并且正如预期的那样允许它通过防火墙。 但是,仍然需要进行一些配置更改,以便使用非默认设置或使用域名提供内容。

第3步 - 设置服务器块

使用Nginx Web服务器时, 服务器块 (类似于Apache中的虚拟主机)可用于封装配置详细信息并从单个服务器托管多个域。 我们将设置一个名为example.com的域名,但您应将其替换为您自己的域名 要了解有关使用DigitalOcean设置域名的更多信息,请参阅我们的DigitalOcean DNS简介

FreeBSD 11.2上的Nginx默认启用一个服务器块,配置为从/usr/local/www/nginx目录中提供文档。 虽然这适用于单个站点,但如果您托管多个站点,它可能会变得难以处理。 不要修改/usr/local/www/nginx ,让我们在example.com网站的/usr/local/www创建一个目录结构。

按如下所示为example.com创建目录,使用-p标志创建任何必需的父目录:

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

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

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

如果您尚未修改umask值,则Web根目录的权限应该是正确的,但您可以通过键入以下内容来确保:

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

接下来,使用ee创建示例index.html页面:

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

在里面,添加以下示例HTML:

/usr/local/www/example.com/html/index.html
<html>
    <head>
        <title>Welcome to Example.com!</title>
    </head>
    <body>
        <h1>Success!  The example.com server block is working!</h1>
    </body>
</html>

完成后保存并关闭文件。

为了让Nginx提供此内容,必须使用正确的指令创建服务器块。 打开主Nginx配置文件。 默认情况下,它保存在/usr/local/etc/nginx/目录中:

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

注意 :通常,您希望避免编辑默认的nginx.conf文件。 但是,在同一目录中,有一个名为nginx.conf-dist的文件,它与默认的nginx.conf文件相同。 如果您发现需要恢复这些配置更改,则可以使用以下命令复制此文件:

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

首次打开文件时,您将在最顶部看到以下内容:

/usr/local/etc/nginx/nginx.conf
#user  nobody;
worker_processes  1;

. . .

通过删除井号( # )取消注释user指令,然后将用户从nobody更改为www 然后更新worker_processes指令,该指令允许您选择Nginx将使用的工作进程数。 在这里输入的最佳值并不总是显而易见或容易找到。 将其设置为auto告诉Nginx将其设置为每个CPU核心一个工作者,这在大多数情况下就足够了:

/usr/local/etc/nginx/nginx.conf
user  www;
worker_processes  auto;
. . .

然后向下滚动到server块。 删除所有注释后,它将如下所示:

/usr/local/etc/nginx/nginx.conf
. . .
    server {
        listen       80;
        server_name  localhost;

        location / {
            root   /usr/local/www/nginx;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {
            root   /usr/local/www/nginx-dist;
        }
    }

删除整个服务器块,包括所有注释掉的行,并将其替换为以下内容:

/usr/local/etc/nginx/nginx.conf
. . .
    server {
        access_log /var/log/nginx/example.com.access.log;
        error_log /var/log/nginx/example.com.error.log;
        listen       80;
        server_name  example.com www.example.com;

        location / {
            root   /usr/local/www/example.com/html;
            index  index.html index.htm;
        }
    }
. . .

以下是此服务器块中的指令:

  • access_log :该指令定义服务器访问日志的位置。
  • error_log :这定义了Nginx将写入其错误日志的文件。
  • listenlisten指令声明Nginx应该监听哪个端口。 在这种情况下,我们将其设置为端口80以便它可以监听HTTP流量。
  • server_name :在这里,将Nginx指向您的域名以及您拥有的任何别名。 如果您没有域名,请将Nginx指向服务器的公共IP地址。
  • root :这定义了您在此步骤中先前创建的网站文档根目录。
  • index :该指令定义将用作索引的文件,以及应检查它们的顺序。

总之,删除注释后,文件将如下所示:

/usr/local/letc/nginx/nginx.conf
user  www;
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        access_log /var/log/nginx/example.com.access.log;
        error_log /var/log/nginx/example.com.error.log;
        listen       80;
        server_name  example.com www.example.com;

        location / {
            root   /usr/local/www/example.com;
            index  index.html index.htm;
        }

    }

}

完成后保存并关闭文件。 然后,键入以下命令测试配置文件中的语法错误:

sudo nginx -t

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

nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful

如果上面的命令返回错误,请将Nginx配置文件重新打开到找到错误的位置,然后尝试解决问题。

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

sudo service nginx reload

Nginx现在应该提供您在index.html文件中设置的内容。 通过导航到http:// example.com ,您应该在其中看到如下内容:

Nginx第一个服务器块

最后一步,我们将介绍一些允许您管理Nginx服务的命令。

第4步 - 管理Nginx进程

现在您已启动并运行Web服务器,让我们回顾一些基本的管理命令。

要停止Web服务器,请键入:

sudo service nginx stop

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

sudo service nginx start

要停止然后再次启动该服务,请键入:

sudo service nginx restart

如果您只是进行配置更改,则可以重新加载Nginx而不会丢弃任何连接。 为此,请键入:

sudo service nginx reload

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

结论

您现在已在计算机上安装了功能齐全的Nginx Web服务器。 从这里,您可以通过启用HTTPS来加密服务器的Web流量。 要了解如何执行此操作,请参阅如何使用FreeBSD上的Let加密来保护Nginx 您还可以安装和配置MySQL和PHP ,它们与Nginx一起为您提供完整的FEMP。


分享按钮