一、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机构上
863

被折叠的 条评论
为什么被折叠?



