4.1 安装 Nginx

Nginx是Apache HTTP Server的替代品,也是互联网上使用最广泛的web服务器之一。它的设计目标之一是提供比Apache更好的性能,并处理更多的并发请求。它还经常用作反向缓存代理和负载均衡器。但是,它的配置往往不如Apache灵活,而且在某些情况下更难扩展新特性。
Red Hat Enterprise Linux 8提供Nginx作为应用程序流。在撰写本文时,有两个版本可用。
- Nginx 1,14的应用程序流与RHEL 8.0一起发布,将于2021年5月退役,并被设置为默认值。
- Nginx 1.16的应用程序流与RHEL 8.1一起发布,将于11月退役2021.
[root@host ~]# yum module install nginx:1.16
你可以使用下面的命令来验证Nginx是否已经安装并验证它的版本:
[root@host ~]# nginx -v
nginx version: nginx/1.16.1

4.2 配置 Nginx

Nginx的默认配置根目录是/etc/nginx目录。它的主要配置文件是/etc/nginx/nginx.conf。此文件包含Web服务器操作的全局设置,包括主网站的默认服务器块。它还从/etc/nginx/conf.d加载名称以.conf结尾的其他配置文件。
Nginx使用包含指令的基于文本的配置文件。一个简单的指令由指令名、以空格分隔的参数列表和结束指令的分号组成。块指令类似于简单指令,只是它不是以分号结尾,而是以一组额外的指令或指令以花括号({and})括起来结束。
在配置的顶层,四个称为上下文的特殊块指令将指令组合在一起,用于管理不同类型的流量:
- events: 用于一般连接处理
- http: 用于HTTP流量
- mail: 用于eamil流量
- stream: 用于TCP和UDP流量
没有包含在这些上下文中的顶级指令被称为在主上下文中。
在本课程中,最重要的上下文是http上下文。/etc/nginx/conf.d中的.conf文件被加载到该上下文中。

4.2.1 配置虚拟服务器

在http上下文中,服务器块指令定义了Nginx提供的http虚拟服务器。创建一个新的虚拟服务器最简单的方法是将一个包含一个或多个服务器块的.conf文件放入/etc/nginx/conf.d。
下面的示例指定了一个基本的虚拟服务器,它与端口80/TCP和主机名example.com或www.example.com相匹配。location指令将其文档根目录设置为/srv/www/www.example.com。server {
    listen 80;
    server_name example.com www.example.com;
    location / {
        root /srv/www/www.example.com;
    }
}
服务器名称可以是准确的名称,可以包含通配符替换名称的第一部分或最后一部分,或者可以使用正则表达式:
server {
    listen 80;
    server_name www.example.com *.lab.example.com ~^server.?\.example.\com$;
    location / {
        root /srv/www/www.example.com;
    }
}
当搜索与基于名称的虚拟主机匹配的虚拟服务器时,Nginx会尝试找到第一个匹配的名称,如下所示:
- 使用匹配的确切名称。
- 如果没有找到匹配项,Nginx会尝试匹配以星号开头的最长通配符名称。
- 如果没有找到匹配项,Nginx会尝试匹配以星号结尾的最长通配符名称。
- 最后,按配置文件顺序匹配的第一个正则表达式。
access_log指令和error_log指令设置日志文件的路径、格式和配置。主要参数是要使用的日志格式。(在/etc/nginx/nginx.conf配置文件中的http上下文中的log_format指令定义了main。)
server {
    listen 80;
    server_name example.com www.example.com;
    access_log /var/log/nginx/example.com_access.log main;
    error_log /var/log/nginx/example.com_error.log main;
    location / {
        root /srv/www/example.com;
        index index.html index.htm;
    }
}
文档根目录中的内容必须能被运行nginx进程的nginx用户读取。Nginx使用与Apache HTTP Server相同的SELinux上下文。

4.2.2 配置TLS虚拟服务器

使用实例配置支持HTTPS协议的虚拟服务器。
- 设置监听443 ssl;
- 将ssl_certificate设置为包含TLS服务器证书的文件。
- 将ssl_certificate_key设置为包含TLS服务器证书私钥的文件。
产生的server块可能如下所示:
server {
    listen 443 ssl;
    server_name example.com www.example.com;
    ssl_certificate /etc/pki/tls/certs/example.com.rsa.crt;
    ssl_certificate_key /etc/pki/tls/private/example.com.rsa.key;
    location / {
        root /sites/$domain;
    }
}
如果您希望在端口80/TCP上使用HTTP连接到站点的用户自动被重定向到安全站点,则可以添加另一个在端口80/TCP上侦听的服务器块,该服务器块使用返回指令发送HTTP 301重定向。完整的配置如下所示:
server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}
server {
    listen 443 ssl;
    server_name example.com www.example.com;
    ssl_certificate /etc/pki/tls/certs/example.com.rsa.crt;
    ssl_certificate_key /etc/pki/tls/private/example.com.rsa.key;
    location / {
        root /sites/$domain;
    }
}

4.2.3 检查配置文件错误

有两个命令可用于验证配置文件中的错误。
nginx -t将检查配置文件的语法问题,并尝试打开配置文件引用的任何文件。它在退出时提供一个简短的报告。
nginx -T会做同样的事情,但它也会在退出时将配置文件转储到标准输出。
无论何时对配置文件进行更改,都需要在更改生效之前重新加载nginx服务。

4.3 运行Nginx

要启动Nginx,请使用Nginx服务单元:
[root@host ~]# systemctl enable --now nginx
这会启动以nginx用户运行的nginx进程。
您还需要确保http和https防火墙服务是打开的,以便客户端可以与您的服务器通信。