定义自定义服务器块

我们现在应该创建一个自定义服务器块来为 html 站点提供服务。
首先,我们将创建一个目录作为块的文档根目录,我们称之为example:

$ sudo mkdir /var/www/example

我们还需要创建一个 index.html 页面用来测试

$ echo "Welcome to example!" | sudo tee /var/www/example/index.html > /dev/null

完成后,我们可以在/etc/nginx/sites-available目录中创建一个服务器块,为了一致性,我们将其命名为“example”:

server {
    listen 80;
    root /var/www/example;
    index index.html;
    server_name www.example.lan;
}

测试我们的配置是否正确,不包含任何语法错误:

$ sudo nginx -t

如果我们没有 dns 服务器,要使用指定的名称向我们的服务器发送请求,
我们必须在客户端机器的 /etc/hosts文件中添加一个条目。
将www.example.lan解析为服务器IP:

# The client /etc/hosts file
[...]
192.168.122.89 www.example.lan

要激活我们的服务器块,我们必须从我们在 /etc/nginx/sites-available中编写的配置创建一个符号链接到 /etc/nginx/sites-enabled

$ sudo ln -s /etc/nginx/sites-available/example /etc/nginx/sites-enabled

之后,我们需要重新启动nginx:

$ sudo systemctl restart nginx

现在,使用浏览器打开,http://www.example.lan应该可以看到我们的index.html页面。

第1步 - 安装nginx

在Ubuntu 18.04上安装nginx非常简单,我们只需要使用apt-get

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

第一个命令用Ubuntu存储库同步我们的计算机,而第二个实际安装Nginx包。

我们可以轻松使用以下Linux命令验证服务是否运行:

$ sudo systemctl is-active nginx

nginx服务器块(虚拟主机)

nginx服务器块,等效于Apache VirtualHosts,并且用于在同一服务器计算机上运行多个站点。
在NGINX的标准安装上,我们可以找到默认的“服务器块”是 /etc/nginx/sites-available/default

# Default server configuration
#
server {
  listen 80 default_server;
  listen [::]:80 default_server;
  [...]
  root /var/www/html;
  # Add index.php to the list if you are using PHP
  index index.html index.htm index.nginx-debian.html;
  server_name _;
  location / {
    # First attempt to serve request as file, then
    # as directory, then fall back to displaying a 404.
    try_files $uri $uri/ =404;
  }
  [...]
}

使用SSL

要使用SSL,我们基本上有两个选项:从证书颁发机构获取证书,或者使用自签名证书。
在这个例子中我们将自己生成证书。

$ sudo openssl req -x509 \
  -days 365 \
  -sha256 \
  -newkey rsa:2048 \
  -nodes \
  -keyout /etc/ssl/private/example.key \
  -out /etc/ssl/certs/example-cert.pem

使用此命令,我们生成了一个有效期为 365 天的自签名证书和一个 2048 位的 rsa 密钥。

证书和密钥将分别保存在/etc/ssl/certs/example-cert.pem/etc/ssl/private/example.key文件中。
只需回答将被问到的问题,在输入FQDN时要特别注意:它必须与将使用证书的域匹配才能正常工作。

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
----
Country Name (2 letter code) [AU]:IT
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:Milan
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Damage Inc.
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:www.example.lan
Email Address []:

既然我们有证书和密钥,我们必须修改服务器块配置,使它变成:

server {
    listen 443 ssl;
    server_name www.example.lan;
    ssl_certificate /etc/ssl/certs/example-cert.pem;
    ssl_certificate_key /etc/ssl/private/example.key;
    root /var/www/example;
    index index.html;
}

如您所见,我们在第 2 行修改了 listen指令,使用端口 443并启用了 ssl参数,然后我们在第 4-5 行添加了两个新指令:ssl_certificatessl_certificate_key, 分别指向证书和证书密钥位置。

重新启动 nginx 服务后,如果我们现在导航到 https://www.example.lan,我们应该会看到浏览器发出的警告,因为证书是自签名的。 尽管如此,我们的配置仍在运行,并且我们正在使用加密连接:

第2步 - 防火墙设置

首先,我们验证防火墙是否有效:

$ sudo ufw status

使用下面命令激活防火墙

$ sudo ufw enable

允许通过端口80传入连接:

$ sudo ufw allow 80/tcp

允许端口443:

$ sudo ufw allow 443/tcp

检查防火墙的当前状态:

$ sudo ufw status numbered
Status: active
     To                         Action      From
     --                         ------      ---
[ 1] 443/tcp                    ALLOW IN    Anywhere
[ 2] 80/tcp                     ALLOW IN    Anywhere
[ 3] 443/tcp (v6)               ALLOW IN    Anywhere (v6)
[ 4] 80/tcp (v6)                ALLOW IN    Anywhere (v6)

使用Let’s encrypt证书

自签名证书的替代方案是使用由验证的第三方颁发证书。

可以从证书颁发机构购买证书,这里我们使用免费的Let’s encrypt。

“Let’s Encrypt ”本身是一个免费的和开放的证书颁发机构,它可以使用在服务器上运行的ACME协议和证书管理代理自动获取浏览器可信的证书。

要使用该服务,首先要做的是安装“Certbot”ACME客户端和Nginx特定的插件:

$ sudo apt-get update && apt-get install certbot python-certbot-nginx

获取证书非常简单:

$ sudo certbot --nginx -m <administrator-email> -d <domain>

如果一切顺利,证书和密钥将保存到/etc/letsencrypt/live/目录中。 Certbot 还将对服务器块应用所需的更改并重新加载服务。

如何在Ubuntu 18.04 Linux上搭建nginx Web服务器
日期:2020-07-07 20:55:40 来源:oir作者:oir