RH358配置Web服务器--使用Nginx配置Web服务器

RH358配置Web服务器–使用Nginx配置Web服务器

介绍Nginx的基础应用与配置。做为基础理解与运用。

文章目录

1. 安装 Nginx

Nginx是Apache HTTP服务器的替代品,也是互联网上使用最广泛的web服务器之一。它的设计目标之一是提供比Apache更好的性能,并处理更多的并发请求。它还经常用作反向缓存代理和负载均衡。但是,它在配置上不如Apache灵活,并且在某些情况下更难使用新特性进行扩展。

RHEL 8 提供 Nginx 作为 application streams。有两个版本可用

  • Nginx 1.14的应用程序流是随着RHEL 8.0发布的,将在2021年5月退休,并被设置为默认值。

  • Nqinx 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

2. 配置 Nginx

Nginx的默认配置根目录是/etc/nginx。其主配置文件为/etc/nginx/nginx.conf。该文件包含web服务器的全局设置,包括主网站的默认服务器块。它还从/etc/nginx/conf.d加载额外的配置文件。

Nginx 的配置文件中包含指令。指令由指令名称、空格分隔的参数列表以及结束指令的分号组成。

块指令与简单指令相似,但不是以分号结束,而以括在大括号中的⼀组额外指令结束。

在配置的顶层,有四个特殊的块指令称为上下文,它们将指令分组在一起,以管理不同类型的流量:

  • events:用于常规连接处理

  • http:用于 HTTP 流量

  • mail:用于电子邮件流量

  • stream:用于 TCP 和 UDP 流量

没有包含在这些上下文中的顶层指令称为在主上下文中。

在本课程中,最重要的上下文是http上下文。/etc/nginx/conf.d中的.conf文件被加载到该上下文中。

配置虚拟服务器

在http上下文中,server block指令定义了Nginx提供的http虚拟服务器。创建一个新的虚拟服务器最简单的方法是在/etc/nginx/conf.d中放置一个包含一个或多个服务器块的 .conf文件

下面的示例指定了一个基本的虚拟服务器,它与端口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上下文。

配置TLS虚拟服务器

配置支持HTTPS协议的虚拟服务器:

  • 将 listen 设置为 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 Redirect来实现此目的。完整的配置如下所示:

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;
    }
}

检查配置文件是否有错误

有两个命令对于验证配置文件是否有错误非常有用。

  • nginx -t将检查你的配置文件的语法问题,并尝试打开配置文件引用的任何文件。它在退出时提供一个简短的报告

  • nginx -T将做同样的事情,但它也将转储配置文件到标准输出时,退出

当对配置文件进行更改时,需要重新加载nginx服务才能使更改生效。

3. 运行Nginx

启动Nginx,使用Nginx服务单元:

[root@host ~]# systemctl enable --now nginx

这将以nginx用户启动nginx进程。

还需要确保http和https防火墙服务是打开的,以便客户端可以与服务器通信。

4. 课本练习

[student@workstation ~]$ lab web-nginx start

1. 找出Nginx默认安装的版本。

[root@servera ~]# yum module list *nginx*
Last metadata expiration check: 0:02:55 ago on Tue 29 Jun 2021 10:44:45 AM CST.
Red Hat Enterprise Linux 8.1 AppStream (dvd)
Name                      Stream                      Profiles                      Summary                           
nginx                     1.14 [d]                    common [d]                    nginx webserver                   
nginx                     1.16                        common [d]                    nginx webserver                   

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

[root@servera ~]# yum module reset nginx
Last metadata expiration check: 0:03:02 ago on Tue 29 Jun 2021 10:44:45 AM CST.
Dependencies resolved.
Nothing to do.
Complete!

[root@servera ~]# yum module -y install nginx:1.16

2. 使用标识内容和适当的SELinux上下文创建两个内容目录。

[root@servera ~]# mkdir -p /srv/nginx/{www-a,servera}/www

3. 在两个内容目录中创建带有不同web内容的index.html文件。

[root@servera ~]# echo 'This is the www-a page' > /srv/nginx/www-a/www/index.html
[root@servera ~]# echo 'This is the servera page' > /srv/nginx/servera/www/index.html

4. 将目录/srv/nginx重新标记为httpd_sys_content_t从而添加到SELinux策略中。

[root@servera ~]# semanage fcontext -a -t httpd_sys_content_t '/srv/nginx(/.*)?'
[root@servera ~]# restorecon -vvFR /srv/nginx
Relabeled /srv/nginx from unconfined_u:object_r:var_t:s0 to system_u:object_r:httpd_sys_content_t:s0
Relabeled /srv/nginx/www-a from unconfined_u:object_r:var_t:s0 to system_u:object_r:httpd_sys_content_t:s0
Relabeled /srv/nginx/www-a/www from unconfined_u:object_r:var_t:s0 to system_u:object_r:httpd_sys_content_t:s0
Relabeled /srv/nginx/www-a/www/index.html from unconfined_u:object_r:var_t:s0 to system_u:object_r:httpd_sys_content_t:s0
Relabeled /srv/nginx/servera from unconfined_u:object_r:var_t:s0 to system_u:object_r:httpd_sys_content_t:s0
Relabeled /srv/nginx/servera/www from unconfined_u:object_r:var_t:s0 to system_u:object_r:httpd_sys_content_t:s0
Relabeled /srv/nginx/servera/www/index.html from unconfined_u:object_r:var_t:s0 to system_u:object_r:httpd_sys_content_t:s0

5. 按要求创建TLS虚拟服务器

[root@servera ~]# scp workstation:/home/student/*.conf /etc/nginx/conf.d/  #环境已经弄好
root@workstation's password: redhat
[root@servera ~]# cat /etc/nginx/conf.d/www-a.lab.example.com.conf 
server {
    listen 80 ;
    server_name www-a.lab.example.com;
    return 301 https://$host$request_uri;

}
server {
    listen 443 ssl;
    server_name www-a.lab.example.com;

    ssl_certificate /etc/pki/tls/certs/www-a.lab.example.com.crt;
    ssl_certificate_key /etc/pki/tls/private/www-a.lab.example.com.key;

    location / {
        root /srv/nginx/www-a/www;
        index index.html index.htm;
    }
}
[root@servera ~]# cp /etc/nginx/conf.d/www-a.lab.example.com.conf  /etc/nginx/conf.d/servera.lab.example.com.conf
[root@servera ~]# sed -i 's/www-a/servera/g' /etc/nginx/conf.d/servera.lab.example.com.conf

6. 将证书和密钥文件拷贝到服务器的/etc/pki/tls/certs和/etc/pki/tls/private目录下。

[root@servera ~]# cd /etc/pki/tls/certs
[root@servera certs]# scp workstation:/home/student/*.crt ./
root@workstation's password: redhat
cacert.crt                                                 100% 1395   683.7KB/s   00:00    
servera.lab.example.com.crt                               100% 4583     1.6MB/s   00:00    
www-a.lab.example.com.crt                               100% 4577     1.7MB/s   00:00    

[root@servera certs]# cd /etc/pki/tls/private
[root@servera private]# scp workstation:/home/student/*.key ./
root@workstation's password: redhat
servera.lab.example.com.key 100% 1708 460.3KB/s 00:00
www-a.lab.example.com.key 100% 1704 561.5KB/s 00:00

7. 启动并启用Nginx服务并打开相应的防火墙端口。

![1](F:/1.jpg)[root@servera private]# systemctl enable --now nginx
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.
[root@servera private]# firewall-cmd --permanent --add-service=http --add-service=https
success
[root@servera private]# firewall-cmd --reload
success

8. 测试访问。

RH358配置Web服务器--使用Nginx配置Web服务器

完成实验。

[student@workstation ~]$ lab web-nginx finish

总结

  • 安装和配置Nginx。
  • 配置与演示web服务。
  • 若喜欢小女子的文章,顺手点个赞。也可点个关注,因为后续会不断上干货。
上一篇:springboot快速入门-9.项目启动后读取数据库并放到Redis


下一篇:spark 执行spark-example