如何在Ubuntu 18.04上配置Nginx服务器块

时间:2020-03-05 15:31:52  来源:igfitidea点击:

Nginx服务器块使我们可以在一台机器上运行多个。
使用服务器块,我们可以指定站点文档根目录(包含文件的目录),为每个站点创建单独的安全策略,为每个站点使用不同的SSL证书等等。

在本文中,我们将提供有关如何在Ubuntu 18.04上设置Nginx服务器块(类似于Apache虚拟主机)的分步说明。

步骤1)创建具有sudo特权的非root用户

  • 以root身份登录
  • 创建一个新用户
# adduser bobby
  • 授予行政特权
    要将这些特权添加到我们的新用户,我们需要将新用户添加到sudo组。默认情况下,在Ubuntu 18.04上,允许属于sudo组的用户使用sudo命令。
# usermod -aG sudo bobby

步骤2)安装Nginx并配置防火墙

Nginx软件包可在Ubuntu默认软件存储库中获得。
安装非常简单,只需键入以下命令:

$sudo apt-get update
$sudo apt-get install nginx

安装完成后,通过键入以下命令来检查服务状态:

$sudo systemctl status nginx
output
  ● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2016-07-25 13:14:45 UTC; 59s ago
       Docs: man:nginx(8)
    Process: 2756 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SU
    Process: 2747 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, st
   Main PID: 2762 (nginx)
      Tasks: 2 (limit: 1112)
     CGroup: /system.slice/nginx.service
             ├─2762 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             └─2764 nginx: worker process

要了解Nginx版本,请输入以下命令:

$sudo nginx -V
output
nginx version: nginx/1.14.0 (Ubuntu)
built with OpenSSL 1.1.0g  2 Nov 2016

我们的Ubuntu 18.04服务器受防火墙保护,因此我们需要打开“ HTTP(80)”和“ HTTPS(443)”端口。

默认情况下,Ubuntu 18.04附带了一个名为“ UFW”(非复杂防火墙)的防火墙配置工具,因此我们可以使用以下命令打开必要的端口:

注意:Nginx Full:此配置文件同时打开端口80(正常,未加密的网络流量)和端口443(TLS/SSL加密的流量)
$sudo ufw allow 'Nginx Full'

我们启用“ ufw”:

$sudo ufw enable

我们可以通过以下方式验证更改:

$sudo ufw status
output
  Status: active
  To                         Action      From
  --                         ------      ---
  Nginx Full                 ALLOW       Anywhere
  Nginx Full (v6)            ALLOW       Anywhere (v6)

现在,我们可以在浏览器中打开http://server_domain_or_IP,我们应该能够看到默认的Nginx登陆页面,如下所示:

步骤3)创建目录结构

文档根目录是用于存储域名文件并响应请求的目录。
我们可以将文档根目录设置为所需的任何位置,但是在本文中,我们将使用以下目录结构:

/var/www/
├── domain1.com
│   └── images
│   └── index.html
│   └── style.css
├── domain2.net
│   └── images
│   └── index.html
│   └── style.css

基本上,我们将为要托管在服务器上的每个域的“/var/www”目录中创建一个单独的目录。

让我们为我们的域创建根目录:

$sudo mkdir -p /var/www/domain1.com

为了进行测试,我们将在域的文档根目录中创建一个index.html,style.css文件和镜像目录。

$cd /var/www/domain1.com/
/var/www/domain1.com$sudo mkdir images index.html style.css

打开我们的编辑器并创建演示文件:

/var/www/domain1.com/index.html

<!DOCTYPE html> <html lang =“ zh-cn” dir =“ ltr”> <head> <meta charset =“ utf-8”> <title>欢迎来到domain1.com </title> <link rel =“ stylesheet” href =“ style.css” </head> <body> <h1 style =“ color:green; text-align:center;”>成功! domain1.com主页!</h1> </body> </html>

在本文中,我们以“ sudo”用户身份运行命令,而新创建的文件和目录归“ root”用户所有。

为了避免任何权限问题,我们可以将域文档根目录的所有权更改为Nginx用户'(www-data)':

$sudo chown -R www-data: /var/www/domain1.com

我们将对“ domain2.net”执行相同的步骤

步骤4)为每个域创建Nginx服务器阻止文件

现在我们有了要提供的内容,我们需要实际创建服务器块,该服务器块将告诉Nginx如何执行此操作。

默认情况下,Nginx包含一个称为“ dfault”的服务器块,我们可以将其用作我们自己的配置的模板。
我们将从设计第一个域的服务器块开始,然后将其复制到第二个域并进行必要的修改。

1)创建第一个Nginx服务器块文件

如上所述,我们将通过复制默认文件来创建我们的第一个服务器块配置文件:

$sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/domain1.com

现在,使用sudo权限打开在文本编辑器中创建的新文件:

$sudo nano /etc/nginx/sites-available/domain1.com

编辑文件后,它将类似于以下内容:

/etc/nginx/sites-available/domain1.com

服务器{收听80;听[::]:80;根目录/var/www/domain1.com; index index.html index.htm index.nginx-debian.html; server_name domain1.com www.domain1.com;位置/{try_files $uri $uri/= 404; }}

这就是我们基本配置所需要的。
保存并关闭文件以退出'Ctrl'+'x'。

2)创建第二个Nginx服务器块文件

现在我们有了第一个nginx服务器块配置,我们可以将其用作第二个文件的基础。
将其复制以创建新文件:

$sudo cp /etc/nginx/sites-available/domain1.com /etc/nginx/sites-available/domain2.net

在编辑器中以“ sudo”权限打开新文件:

$sudo nano /etc/nginx/sites-available/domain2.net

调整root指令以指向我们第二个域的文档“ root”,并调整“ server_name”以匹配我们第二个站点的域名(确保包括任何别名)。

完成后,我们的文件可能看起来像这样:

/etc/nginx/sites-available/domain2.net

服务器{收听80;听[::]:80;根/var/www/domain2.net; index index.html index.htm index.nginx-debian.html; server_name domain2.net www.domain2.net;位置/{try_files $uri $uri/= 404; }}

保存并关闭文件以退出'Ctrl'+'x'。

步骤5)启用我们的Nginx服务器块并重新启动Nginx

现在我们有了服务器阻止文件,我们需要启用它们。
为此,我们可以创建从这些文件到'sites-enabled'目录的符号链接,Nginx在启动过程中会从中读取这些链接。

我们可以通过键入以下内容来创建这些链接:

$sudo ln -s /etc/nginx/sites-available/domain1.com /etc/nginx/sites-enabled/
$sudo ln -s /etc/nginx/sites-available/domain2.net /etc/nginx/sites-enabled/

这些文件现在位于已启用的目录中,我们现在已启用了三个服务器块:

  • domain1.com:将响应对domain1.com和www.domain1.com的请求
  • domain2.net:将响应对domain2.net和www.domain2.net的请求
  • 默认值:将响应端口80上与其他两个模块不匹配的任何请求。

为了避免可能由于添加其他服务器名称而引起的哈希存储桶内存问题,我们将继续在/etc/nginx/nginx.conf文件中调整单个值。
立即打开文件:

$sudo nano /etc/nginx/nginx.conf

在文件中,找到“ server_names_hash_bucket_size”指令。
删除“#”符号以取消注释该行:

/etc/nginx/nginx.conf

http {。


server_names_hash_bucket_size 64; 。


}

完成后保存并关闭文件。

接下来,测试以确保我们的任何Nginx文件中都没有语法错误:

$sudo nginx -t

如果未发现问题,请重新启动Nginx以启用我们的更改:

$sudo systemctl restart nginx

Nginx现在应该同时服务于我们的两个域名。

第6步:转到我们的网站

现在我们已经完成所有设置,我们应该测试我们的服务器块是否正常运行。
我们可以通过在Web浏览器中访问域来做到这一点:

http://domain1.com

我们应该看到一个如下所示的页面:

如果我们访问第二个域名,则应该看到一个稍微不同的站点:

http://domain2.net