RHCE第四章:web服务器

一、nginx是轻量级http服务器

[root@RH ~]# dnf install nginx        #安装nginx服务

[root@RH ~]# dnf install tree
[root@RH nginx]# tree
.
├── conf.d        #nginx服务的子配置文件
├── default.d
├── fastcgi.conf        #java,php,c++的应用程序接口
├── fastcgi.conf.default
├── fastcgi_params
├── fastcgi_params.default
├── koi-utf
├── koi-win
├── mime.types        #nginx的媒体支持类型
├── mime.types.default
├── nginx.conf        #nginx的主配置文件
├── nginx.conf.default
├── scgi_params        #python的应用程序结构
├── scgi_params.default
├── uwsgi_params        #对接python写的应用程序
├── uwsgi_params.default
└── win-utf

二、实验1:修改nginx的web服务目录地址

(1)

[root@RH ~]# mkdir /myweb        #创建/myweb目录
[root@RH ~]# echo "hello!" > /myweb/Hello.html        #创建在/myweb下的Hello网页
[root@RH ~]# vim /etc/nginx/nginx.conf        #编辑nginx服务的配置文件
         38     server {
         39         listen       80;        #ipv4的80端口号
         40         listen       [::]:80;        #ipv6的80端口号
         41         server_name  _;        #域名或IP地址
         42         root         /myweb;        #web服务目录地址。修改为/myweb目录
[root@RH ~]# systemctl restart nginx.service        #重启nginx服务

[root@RH ~]# systemctl status firewalld.service        #查看网络防火墙状态
● firewalld.service - firewalld - dynamic firewall daemon
     Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; preset: enabled)
     Active: active (running) since Thu 2025-04-17 22:09:54 CST; 17s ago
       Docs: man:firewalld(1)
   Main PID: 33105 (firewalld)
      Tasks: 2 (limit: 22739)
     Memory: 22.8M
        CPU: 237ms
     CGroup: /system.slice/firewalld.service
             └─33105 /usr/bin/python3 -s /usr/sbin/firewalld --nofork --nopid

4月 17 22:09:54 RH systemd[1]: Starting firewalld - dynamic firewall daemon...
4月 17 22:09:54 RH systemd[1]: Started firewalld - dynamic firewall daemon.
[root@RH ~]# systemctl stop firewalld.service        #临时关闭网络防火墙
[root@RH ~]# getenforce        #查看内核防火墙状态
Enforcing        #此时内核防火墙开启
[root@RH ~]# setenforce 0        #临时关闭内核防火墙

[root@RH ~]# getenforce        #再次查看内核防火墙
Permissive        #此时内核防火墙关闭

操作完后在主机的浏览器上输入http://192.168.153.128/Hello.html 查看网页

(2)

[root@RH myweb]# vim /etc/nginx/nginx.conf

        38     server {
         39         listen       80;
         40         listen       [::]:80;
         41         server_name  _;
         42         root         /myweb;
         43         index        index.html;        #没有index这行,在主机直接访问http://192.168.153.128会默认访问到/myweb目录下的index.html(如果index.html访问时会报错)
[root@RH myweb]# nginx -s reload        #更新nginx服务(重新加载)

[root@RH myweb]# echo "index!" > /myweb/index.html        #在/myweb目录下创建index.html

(3)

[root@RH myweb]# vim /etc/nginx/nginx.conf

        38     server {
         39         listen       80;
         40         listen       [::]:80;
         41         server_name  _;
         42         root         /myweb;
         43         index        Hello.html;        #修改成Hello.html后,在主机直接访问http://192.168.153.128会默认访问到/myweb目录下的Hello.html

[root@RH myweb]# nginx -s reload        #更新nginx服务

(4)

[root@RH myweb]# vim /etc/nginx/nginx.conf

         38     server {
         39         listen       80;
         40         listen       [::]:80;
         41         server_name  _;
         42         root         /myweb;
         43         index        Hello.html;
         44         # Load configuration files for the default server block.
         45         include /etc/nginx/default.d/*.conf;
         46
         47         location /{
         48                 root /myweb1;
         49                 index hello1.html;
         50         }        #创建location可以具体定义某个链接(一般用来匹配不同的URI请求),'/'表示可以直接回车,优先级比server高
[root@RH myweb]# nginx -s reload

[root@RH myweb]# mkdir /myweb1        #创建/myweb1目录
[root@RH myweb]# echo "How are you?" > /myweb1/hello1.html        #在/myweb1创建hello.html并写入'How are you?'

三、实验2:拒绝指定ip地址(主机)访问

先查看自己主机的IP地址,win键+r,出现一个运行窗口输入cmd回车,进入主机的命令窗口后打ipconfig查看自己主机的IP地址

[root@RH ~]# vim /etc/nginx/nginx.conf
         38     server {
         39         listen       80;
         40         listen       [::]:80;
         41         server_name  _;
         42         root         /myweb;
         43         index        Hello.html;
         44         deny         192.168.153.1;        #拒绝192.168.153.1/24的主机访问(黑名单)

         45         allow         xxx.xxx.xxx.xxx;        #白名单,允许访问的IP

[root@RH ~]# nginx -s reload
在主机的浏览器上访问http://192.168.153.128时,因为192.168.153.1/24主机被拒绝,所以访问失败

[root@RH ~]# vim /etc/nginx/nginx.conf
         38     server {
         39         listen       80;
         40         listen       [::]:80;
         41         server_name  _;
         42         root         /myweb;
         43         index        Hello.html;
         44         #deny        192.168.153.1;        #注释掉黑名单

[root@RH ~]# nginx -s reload

再次在主机的浏览器上访问http://192.168.153.128时,192.168.153.1/24主机不在黑名单里,所以访问成功


 

四、实验3:访问nginx时添加密码

[root@RH ~]# dnf install httpd -y        #安装密码工具
[root@RH ~]# htpasswd -cm /etc/nginx/.passwd xing        #创建一个密码文件,'-cm'创建意思,创建到/etc/nginx/.passwd(隐藏文件),账户名称叫xing
New password:        #输入密码
Re-type new password:        #再次输入密码
Adding password for user xing        #创建成功

[root@RH ~]# !vim #!vim意思是打开上一次vim打开的文件
vim /etc/nginx/nginx.conf
         38     server {
         39         listen       80;
         40         listen       [::]:80;
         41         server_name  _;
         42         root         /myweb;
         43         index        Hello.html;
         44         #deny        192.168.153.1;
         45         auth_basic      "请输入您的密码";        #密码提示语
         46         auth_basic_user_file    /etc/nginx/.passwd;        #密码文件的位置

[root@RH ~]# nginx -s reload


 

五、实验4:以列表显示指定目录内容

[root@RH ~]# !vim
vim /etc/nginx/nginx.conf
         38     server {
         39         listen       80;
         40         listen       [::]:80;
         41         server_name  _;
         42         root         /var/log;        #日志文件
         43         #index       Hello.html;
         44         #deny        192.168.153.1;
         45         #auth_basic     "请输入您的密码";
         46         #auth_basic_user_file   /etc/nginx/.passwd;
         47         autoindex       on;        #目录显示(如果目录中存在index指定的文件,则不能显示目录)

[root@RH ~]# nginx -s reload


 

[root@RH ~]# echo "index" > /var/log/index.html        #在日志文件中创建index.html文件

六、实验5:基于不同的ip访问不同的虚拟主机

[root@RH nginx]# vim ~/.vimrc        #编辑vim的默认设置
        set nu        #自动开启行号
        set autoindent        #自动缩进
        set tabstop=4        #Tab键=4个字符

(1)

[root@RH nginx]# !vim
vim /etc/nginx/nginx.conf

         36     include /etc/nginx/conf.d/*.conf;        #nginx服务的子配置文件
         37
         38     server {        #一个server相当于一台虚拟主机
         39         listen       80;
         40         listen       [::]:80;
         41         server_name  192.168.153.128;
         42         root         /myweb;
         43         index        Hello.html; 

         ······
         59     }

[root@RH ~]# vim /etc/nginx/conf.d/web.conf        #创建子配置文件web.conf并编辑
  1 server{
  2     listen  80;        #监听ipv4的80端口号
  3     server_name 192.168.153.101;        #监听的IP地址
  4     root    /web101;        #指定目录
  5 }        #创建出一个server后可以在底部命令行中输入":1,5 co 5"——将1到5行的内容复制到第5行后
  6 server{
  7     listen  80;
  8     server_name 192.168.153.102;
  9     root    /web102;
 10 }

(2)
[root@RH ~]# mkdir /web101 /web102        #创建目录
[root@RH ~]# echo "web101!" > /web101/index.html        #创建index.html并写入web101!
[root@RH ~]# echo "web102!" > /web102/index.html        #创建index.html并写入web102!

[root@RH ~]# ip a        #查看IP地址
······
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:0f:e8:0c brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 192.168.153.128/24 brd 192.168.153.255 scope global dynamic noprefixroute ens160
       valid_lft 1028sec preferred_lft 1028sec        #现在只有一个IP地址:192.168.153.128/24
    inet6 fe80::20c:29ff:fe0f:e80c/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
[root@RH ~]# nmcli connection modify ens160 +ipv4.addresses 192.168.153.101/24        #'+'意思就是添加ip:192.168.153.101


[root@RH ~]# nmcli connection modify ens160 +ipv4.addresses 192.168.153.102/24
[root@RH ~]# nmcli connection reload        #重新加载ip地址
[root@RH ~]# nmcli connection up ens160        #激活ens160
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/3)
[root@RH ~]# ip a        #再次查看ip
······
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:0f:e8:0c brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 192.168.153.101/24 brd 192.168.153.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet 192.168.153.102/24 brd 192.168.153.255 scope global secondary noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet 192.168.153.128/24 brd 192.168.153.255 scope global secondary dynamic noprefixroute ens160        #此时已添加了两个IP地址
       valid_lft 1792sec preferred_lft 1792sec
    inet6 fe80::20c:29ff:fe0f:e80c/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

七、实验6:基于不同的端口号访问不同的虚拟主机

[root@RH ~]# vim /etc/nginx/conf.d/web.conf
  1 server{
  2     listen  81;
  3     server_name 192.168.153.128;
  4     root    /web101;
  5 }
  6 server{
  7     listen  82;
  8     server_name 192.168.153.128;
  9     root    /web102;
 10 }
[root@RH ~]# nginx -s reload

在浏览器访问80端口号时无需加入端口号,因为80是默认端口号;但要访问81、82端口号时必须在ip后面加入端口号

八、实验7:基于不同的域名访问不通的虚拟主机

在浏览器输入域名后的一些动作:

1.浏览器会在缓存中查看域名相关的资源,如果有则直接在浏览器中显示

2.上一步如果找不到,则访问/etc/hosts(Windows系统则是在C:/Windows/System32/drivers/etc/hosts)文件,查看域名和ip的绑定关系,如果有则直接访问该ip。

        在Windows中修改hosts文件用记事本编辑

        在记事本中输入   192.168.153.128  www.xing.com  image.xing.com  bbs.xing.com

        然后"Ctrl+s"保存;如果没有管理员权限,则按下"win+r"键输入notepad,再按"Ctrl+Shift+Enter"键——就是以管理员去编辑记事本,然后保存即可

[root@RH ~]# vim /etc/nginx/nginx.conf
         36     include /etc/nginx/conf.d/*.conf;
         37
         38     server {
         39         listen       80;
         40         listen       [::]:80;
         41         server_name  www.xing.com;        #修改域名
         42         root         /myweb;
         43         index        Hello.html;

[root@RH ~]# vim /etc/nginx/conf.d/web.conf
  1 server{
  2     listen  80;
  3     server_name image.xing.com;
  4     root    /web101;
  5 }
  6 server{
  7     listen  80;
  8     server_name bbs.xing.com;
  9     root    /web102;
 10 }

[root@RH ~]# vim /etc/hosts        #编辑hosts文件,如果在windows主机上已经编辑hosts文件,则无需这步操作
  1 127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomai    n4
  2 ::1         localhost localhost.localdomain localhost6 localhost6.localdomai    n6
  3 192.168.153.128 www.xing.com image.xing.com bbs.xing.com

[root@RH ~]# nginx -s reload

九、server_name 和 loaction

1.server_name _; :表示兜底匹配,优先级最低

        精确匹配:server_name http://www.nginx.com;

        左侧匹配:server_name *.nginx.com;(如:可以匹配www.nginx.com,image.nginx.com)

        右侧匹配:server_name www.nginx.*;(如:可以匹配www.nginx.com,www.nginx.cn)

        正则匹配:server_name ~^www.nginx.*$;(‘~’表示正则的意思,'^'后面接着'www'表示必须是www开头,'$'前面接着'*'表示可以是任意域名结尾)

        匹配优先级:精确匹配 > 左侧匹配 > 右侧匹配 > 正则匹配 > 兜底匹配(范围越大,优先级越低)

2.location写在server下

(1)

http://192.168.153.128/web/a/b/1.html 中第一个'/'后的内容即'/web/a/b/1.html'叫做URL的URI部分,也就是lication配置段中一般用来匹配不同URI请求

root指令,可以写在http、server、location等配置中

location /image {

        root /opt/nginx/static;

}        #表示访问到的是/opt/nginx/static/image

alias指令只能访问绝对路径,不会叠加;也只能写在location配置中;且路径结尾必须添加'/'

location /image {

        alias /opt/nginx/static/image/;

}        #表示直接访问到/opt/nginx/static/image/

(2)匹配规则

=        精确匹配

~        正则匹配,区分大小写

~*       正则匹配,不区分大小写

^~       匹配某个字符串开头,不是正则匹配

/          通用匹配(‘= /’和'/'不是同一个意思,'= /'表示匹配到以'/'结尾的路劲)

匹配优先级:'=' > '^~' > '~' > '~*' >不带任何字符

[root@RH ~]# vim /etc/nginx/nginx.conf

         55         location / {
         56             return 200 "this is /";        #200表示状态码
         57         }
         58
         59         location /image {
         60             return 200 "this is /image";
         61         }
         62
         63         location ~ \.(jpg|png)$ {        #表示无论jpg或png前面是什么,都只匹配jpg、png结尾
         64             return 200 "this is jpg or png";
         65         }
[root@RH ~]# nginx -s reload        #重新加载nginx服务
nginx: [error] open() "/run/nginx.pid" failed (2: No such file or directory)        #出现错误,重新加载必须在重启一次服务后才能使用
[root@RH ~]# systemctl restart nginx.service

[root@RH ~]# curl 192.168.153.128/         #拉回192.168.153.128/的数据

this is /[root@RH ~]#
this is /[root@RH ~]# curl 192.168.153.128/image        #拉回192.168.153.128/image的数据

this is /image[root@RH ~]#
this is /image[root@RH ~]# curl 192.168.153.128/123/abc/666.jpg
this is jpg or png[root@RH ~]#

十、https协议

https是以安全为目标的http通道,即http+ssl(tls)

ssl协议就是证书,包含对称加密和非对称加密等算法

(1)创建ssl的密钥和证书

[root@RH ~]# mkdir /etc/nginx/cert        #创建证书文件夹
[root@RH ~]# cd /etc/nginx/cert/
[root@RH cert]# openssl genrsa -out xing.key 2048        #生成密钥。openssl工具用来生成密钥,genrsa——rsa加密算法,-out——输出密钥,xing.key——密钥名称,2048——创建秘钥的字节数(建议字节数不小于2048)
[root@RH cert]# ls
xing.key
[root@RH cert]# cat xing.key
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDWBeCu93oJMjUj
PBrTPdNCVctCn5wWbOL0BfvSe1LZj06133E9ji……

[root@RH cert]# openssl req -new -key xing.key -x509 -days 365 -out xing.crt        #生成证书。-req——请求,-key xing.key——所需的密钥,-x509——指定ssl的证书版本,-days 365——证书有效期为365天,-out xing.crt——输出名称为xing的证书
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) [XX]:86        #国家的名字,我们中国的区号是86
State or Province Name (full name) []:guangxi        #省份
Locality Name (eg, city) [Default City]:guilin        #城市
Organization Name (eg, company) [Default Company Ltd]:openlab        #组织(公司)
Organizational Unit Name (eg, section) []:RHCE        #部门
Common Name (eg, your name or your server's hostname) []:xing        #网站名称
Email Address []:xing.@Gmali.com        #邮箱地址

(2)创建https的虚拟主机

[root@RH ~]# vim /etc/nginx/conf.d/ssl.conf        #创建nginx服务子配置文件ssl.conf编辑
  1 server{
  2     listen  443 ssl;        #创建https的虚拟主机,并用ssl证书
  3     server_name www.xing.com;        #监听域名
  4     root    /usr/share/nginx/html;        #指定目录
  5     ssl_certificate /etc/nginx/cert/xing.crt;        #指定证书
  6     ssl_certificate_key /etc/nginx/cert/xing.key;        #指定密钥
  7 }

[root@RH ~]# nginx -s reload

[root@RH ~]# systemctl stop firewalld.service        #关闭网路防火墙
[root@RH ~]# setenforce 0        #关闭内核防火墙

在主机的浏览器下访问https://www.xing.com

因为我们创建的证书没有在ca机构注册,所以会有危险;点击高级,继续访问

点击左上角的不安全->与此站点的连接不安全->右上角的小图标,可以查看证书

如果想让自己的网站出于安全状态,就将证书发送到ssl ca机构上


 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值