介绍
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
。
如果您使用的是csh
或tcsh
shell,请确保运行rehash
命令。 这使shell知道您安装的新应用程序:
rehash
注意:如果您不确定当前使用的是哪个shell,可以使用以下命令进行检查:
echo $SHELL
输出将显示当前正在使用的shell程序的文件路径:
Output/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/*
安装完成后,此命令将输出类似于此的列表:
Output/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"
:
. . .
sshd_enable="YES"
nginx_enable="YES"
. . .
在rc.conf
文件中,我们将添加一些指令来启用和配置IPFW防火墙。 IPFW是为FreeBSD编写的状态防火墙。 它提供了强大的语法,允许您为大多数用例自定义安全规则。
在您刚刚添加的nginx_enable
参数的正下方,添加以下突出显示的行:
. . .
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端口。 在此示例中,我们分别指定端口22
和80
以允许对服务器的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
但是,如果您使用的是csh
或tcsh
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已正确安装并正常运行,并且正如预期的那样允许它通过防火墙。 但是,仍然需要进行一些配置更改,以便使用非默认设置或使用域名提供内容。
第3步 - 设置服务器块
使用Nginx Web服务器时, 服务器块 (类似于Apache中的虚拟主机)可用于封装配置详细信息并从单个服务器托管多个域。 我们将设置一个名为example.com的域名,但您应将其替换为您自己的域名 。 要了解有关使用DigitalOcean设置域名的更多信息,请参阅我们的 。
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:
<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
首次打开文件时,您将在最顶部看到以下内容:
#user nobody;
worker_processes 1;
. . .
通过删除井号( #
)取消注释user
指令,然后将用户从nobody更改为www 。 然后更新worker_processes
指令,该指令允许您选择Nginx将使用的工作进程数。 在这里输入的最佳值并不总是显而易见或容易找到。 将其设置为auto
告诉Nginx将其设置为每个CPU核心一个工作者,这在大多数情况下就足够了:
user www;
worker_processes auto;
. . .
然后向下滚动到server
块。 删除所有注释后,它将如下所示:
. . .
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;
}
}
删除整个服务器块,包括所有注释掉的行,并将其替换为以下内容:
. . .
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将写入其错误日志的文件。 -
listen
:listen
指令声明Nginx应该监听哪个端口。 在这种情况下,我们将其设置为端口80
以便它可以监听HTTP流量。 -
server_name
:在这里,将Nginx指向您的域名以及您拥有的任何别名。 如果您没有域名,请将Nginx指向服务器的公共IP地址。 -
root
:这定义了您在此步骤中先前创建的网站文档根目录。 -
index
:该指令定义将用作索引的文件,以及应检查它们的顺序。
总之,删除注释后,文件将如下所示:
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
如果配置文件没有可检测到的语法错误,您将看到以下输出:
Outputnginx: 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服务的命令。
第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。