Py学习  »  NGINX

Nginx网站服务——Nginx安装、Nginx访问控制、Nginx虚拟主机!!!超详细,适合新手看!!!

EAsonTX • 3 年前 • 269 次点击  

一、Nginx服务基础

1.1、关于Nginx

概述:
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。
Nginx是一款轻量级的Web服务器/反向代理服务器以及电子邮件代理服务器,并在一个BSD-like协议下发行。由俄罗斯的程序设计师lgor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。

Nginx相较于Apache\lighttpd具有占有内存少,稳定性高等优势,并且依靠并发能力强,丰富的模块库以及友好灵活的配置而闻名。在Linux操作系统下,nginx使用epoll事件模型,得益于此,nginx在Linux操作系统下效率相当高。同时Nginx在OpenBSD或FreeBSD操作系统上采用类似于Epoll的高效事件模型kqueue.

  • —款高性能、轻量级Web服务软件
    ■稳定性高
    ■系统资源消耗低
    ■对HTTP并发连接的处理能力高
    单台物理服务器可支持30 000~50 000个并发请求

1.2、安装Nginx

现在我们开始安装Nginx

  • 首先我们用 Xftp(或者用别的传输工具) 把 Nginx软件包放到 /opt 目录下;然后进行解压 Nginx
root@localhost opt]# cd /opt
root@localhost opt]# tar xzvf nginx-1.15.9.tar.gz 
[root@localhost nginx-1.15.9]# useradd -M -s /bin/nologin nginx
  • 1
  • 2
  • 3
  • 然后安装环境和需要的模块
[root@localhost opt]# yum -y install gcc gcc-c++  make pcre-devel zlib-devel
[root@localhost opt]# cd nginx-1.15.9/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
[root@localhost opt]# make -j3 && make install   ## 进行安装编译
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 现在做优化路径
##为了使 Nginx 服务器的运行更加方便, 可以为主程序 nginx 创建链接文件, 以便管理员
直接执行 "nginx" 命令就可以调用Nginx的主程序
[root@localhost nginx-1.15.9]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@localhost nginx-1.15.9]# ls -l /usr/local/sbin/nginx 
[root@localhost nginx-1.15.9]# nginx -t  ### 检查配置文件

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 启动、重新配置、停止Nginx
[root@localhost nginx-1.15.9]# nginx  ## 启动 Nginx
[root@localhost nginx-1.15.9]# netstat -anpt |grep nginx ## 过滤Nginx的进程
[root@localhost ~]# yum -y install psmisc        ###最小安装没有killall令需要安装 
[root@localhost ~]# killall -s HUP nginx  ## 重载Nginx配置文件(相当于刷新)
[root@localhost ~]# killall -s QUIT nginx  ## 退出 Nginx
  • 1
  • 2
  • 3
  • 4
  • 5
  • 为了使Nginx服务的启动、停止、重载等操作更加方便,可以编写基于CentOs 7.6的
    Nginx服务控制文件使用systemctl工具来进行管理.CentOS7.6系统的管理习惯
[root@localhost ~]# vi /lib/systemd/system/nginx.service
[Unit]
Description=nginx   ###描述
After=network.target    ####描述服务类别
[Service]
Type=forking    ###后台运行形式
PIDFile=


    
/usr/local/nginx/logs/nginx.pid   ###PID文件位置  
ExecStart=/usr/local/nginx/sbin/nginx    ###启动服务
ExecReload=/usr/bin/kill -s HUP $MAINPID  ###根据PID重载配置
ExecStop=/usr/bin/kill -s QUIT $MAINPID  ###根据PID终止进程
PrivateTmp=true
[Install]
WantedBy=multi-user.target
==>> wq 保存
[root@localhost ~]# chmod 754 /lib/systemd/system/nginx.service 
[root@localhost ~]# systemctl enable nginx.service 
[root@localhost ~]# systemctl start nginx  ## 这样我们就可以用这种方法来开启 Nginx 了
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 安装好之后启动服务,在浏览器输入IP,出现这个画面,服务成功启动!
    在这里插入图片描述

1.3、Nginx访问状态统计

概述:
nginx内置了 http_stub_status 状态统计模块,用来反馈当前的Web访问情况,配置编译参数时可添加
--with-http_stub_status_module 来启用此模块支持,可使用命令 /usr/local/nginx/sbin/nginx -V 来查看已安装的nginx是否包含 http_stub_status 模块。
要使用 nginx 的状态统计功能,除了启用内建模块,还需要修改nginx.conf 配置文件,指定访问位置并添加 stub_status 配置代码

1.3.1、Nginx访问状态统计实验

  • 首先我们先进入 Nginx 的配置文件中
[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf
  • 1

在这里插入图片描述

  • 改好之后 wq 保存,然后用 Nginx -t 查看语法有无报错。如果没有错误,再刷新配置文件
    在这里插入图片描述
[root@localhost ~]# killall -s HUP nginx  ## 表示重载配置(刷新的意思)
  • 1
  • 重载配置文件,在浏览器输入 20.0.0.25/status ,出现如下界面
    配置生效后,来浏览器中访问 Nginx 服务器的 /status 网站位置,可以看到当前的状态统计信息。如下图所示

在这里插入图片描述 1、Active connections 表示当前的活动连接数
2、server accepts handled requests 表示已经处理的连接信息,
3、三个数字以此表示 :
已处理的连接数 6、成功的TCP握手次数 6、已处理的请求数 4

二、Nginx访问控制

概述:
Nginx与Apahce一样,可以实现基于用户授权的访问控制,当客户端想要访问相应网
站或者目录时,要求用户输入用户名和密码才能正常访问,配置步骤与Apache基本一致

2.1、Nginx访问控制实验

适用场景:
当公司的一个部门建立了一个基于nginx的网站,只想让本部门的人登录,不让别的部门的人登录,可以使用基于授权的访问控制

  • 先安装 httpd-tools
[root@localhost ~]#  yum -y install httpd-tools
  • 1
  • 创建用户 test 并设置密码 12345
[root@localhost ~]# htpasswd -c /usr/local/nginx/.passwd.db test
New password: 
Re-type new password: 
Adding password for user test
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

  • 修改文件权限
[root@localhost ~]# chmod 400  /usr/local/nginx/.passwd.db  ## 修改密码文件的权限为400
[root@localhost ~]# chown nginx /usr/local/nginx/.passwd.db 
将所有者修改为 nginx ,设置nginx的运行用户能够读取
  • 1
  • 2
  • 3
  • 查看存放用户名和密码的文件
[root@localhost ~]# cd /usr/local/nginx/  
[root@localhost nginx]# cat .passwd.db   ##查看存放用户名和密码的文件
test:$apr1$vHVaACQT$i1sRjEd2M59E4EJfpxliA.
  • 1
  • 2
  • 3
  • 修改配置文件,添加认证配置
[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf  ##修改配置文件
添加 
 auth_basic "secret";
 auth_basic_user_file /usr/local/nginx/passwd.db;
==


    
>> wq 保存
[root@localhost ~]# nginx -t  ##检测语法
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@localhost ~]# killall -s HUP nginx   ## 重启服务
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

在这里插入图片描述

  • 验证
    在浏览器输入 20.0.0.25 测试 授权访问控制。
    出现这个就代表成功了,然后输入刚才设置的用户名和密码
    在这里插入图片描述 点击登陆后 出现 welcome to nginx!

在这里插入图片描述

2.2、基于客户端的访问控制

  • 通过客户端IP地址,决定是否允许对页面访问
  • 配置规则
    ■deny lP/IP段:拒绝某个IP或IP段的客户端访问
    ■allow IP/IP段:允许某个IP或IP段的客户端访问
    ■规则从上往下执行,如匹配则停止,不再往下匹配

2.2.1、基于客户端的访问控制实验

  • 实验:除主机20.0.0.1之外允许其他客户端访问

  • 首先进入配置文件

[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf
 deny 20.0.0.1; 
 allow all;
==>> wq 保存
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

  • 进行验证
[root@localhost ~]# killall -s HUP nginx   ##重载配置文件
  • 1

在浏览器输入 20.0.0.25 ,登陆不了

在这里插入图片描述

三、Nginx虚拟主机

概述:
利用虚拟主机,不用为每个要运行的网站提供一台单独的Nginx服务器或单独运行一组Nginx进程,虚拟主机提供了在同一台服务器,同一组 Nginx进程上运行多个网站的功能。跟Apache一样,Nginx也可以配置多种类型的虚拟主机,分别是基于IP的虚拟主机、基于域名的虚拟主机、基于端口的虚拟主机。
使用Nginx搭建虚拟主机服务器时,每个虚拟Web站点拥有的“serverf”配置段,各自监听的IP地址、端口号可以单独指定,当然网站名称也是不同的。

  • Nginx支持的虚拟主机
    ■基于域名的虚拟主机
    ■基于IP的虚拟主机
    ■基于端口的虚拟主机

3.1、基于域名的虚拟主机

  • 我们要先改 hosts 映射,这边我们手动更改。
    1、C:\Windows\System32\drivers\etc 先找到hosts文件,然后在桌面复制一份

在这里插入图片描述
2、用记事本打开桌面复制的那份,在最底下更改映射。

在这里插入图片描述
3、保存到桌面,然后把 .txt 后缀名给删掉,选择 “是”
再覆盖到原来的目录里面,让其生效

在这里插入图片描述
4、打开cmd 在测试下,是否生效

在这里插入图片描述

5、我们进去把原配置文件的 server 全部打上 # 号注释掉

[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf
  • 1

在这里插入图片描述
7、然后添加新的server配置文件

## 第一部分
server {
        listen 80;
        server_name www.51xit.com;
        charset utf-8;
        access_log logs/www.51xit.com.access.log;
        location /{
                root /var/www/html/51xit;
                index index.html index.htm;

        }
        error_page 500 502 503 504 /50x.html;
        location = 50.html{
                root html;
                }

}

## 第二部分
server {
        listen 80;
        server_name www.52xit.com;
        charset utf-8;
        access_log logs/www.52xit.com.access.log;
        location /{
                root /var/www/html/52xit;
                index index.html index.htm;

        }
        error_page 500 502 503 504 /50x.html;
        location = 50.html{
                root html;
                }

}
==>> wq 保存
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

8、测试语法有无错误

[root@localhost ~]# nginx -t ## 测试一下语法有无错误
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

[root@localhost ~]# killall -s HUP nginx  ## 刷新配置文件
  • 1
  • 2
  • 3
  • 4
  • 5
  • 进行验证
    然后进入浏览器测试 www.51xit.com www.52xit.com,都可以打开,试验成功
    在这里插入图片描述 在这里插入图片描述

3.2、基于IP的虚拟主机

  • 适用场景:
    一台主机如果有多个IP地址,可以设置每一个IP对应一个站点。主机安装多个网卡有多个IP,这里采用虚拟IP的方式使主机有多个IP

1、我们现在虚拟机增加一张网卡,然后输入nmcli connection,获得新网卡的 UID 信息
我们先把 ens37网卡的UID给复制下来

[root@localhost ~]# nmcli connection
NAME                UUID                                  TYPE      DEVICE 
ens33               a5cbd6d6-af14-46be-8534-b0a38f94ef7b  ethernet  ens33  
Wired connection 1  2397a705-a0fc-319f-9d0c-5287116765f0  ethernet  ens37  
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述
2、把 ens33 的网卡信息 复制到 ens37

[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens37
  • 1
  • 2

在这里插入图片描述
3、刷新网络

[root@localhost network-scripts]# systemctl restart network  ##改完之后刷新网络
  • 1

这边有个需要注意: 如果ip addr 查看网卡信息,发现没有改成功,可以 ifdown ens37 关闭网卡,在 ifup ens37 打开网卡
再查看就有了!

然后在真机 测试下 是否可以 ping 通

在这里插入图片描述
4、

[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf
进去修改 IP地址,这就是上面我们做的 基于域名的虚拟主机 做的配置,
改成用红框框中的配置,一个是 192.168.100.25的,一个是 20.0.0.25的
  • 1
  • 2
  • 3

修改IP地址

在这里插入图片描述 在这里插入图片描述

5、验证


[root@localhost ~]# killall -s HUP nginx  ## 刷新配置
  • 1
  • 2

然后进浏览器测试一下分别输入
192.168.100.25 和 20.0.0.25。如图所示,试验成功

在这里插入图片描述
在这里插入图片描述

注意!!!!!
如果输入的两个IP打开的是同一个网址的话,并且配置文件没有错误的情况下!我们需要先
关闭 killall -s QUIT nginx,在开启 nginx,然后再重新刷新配置文件 killall -s HUP nginx ,在用浏览器测试就没有问题了

3.3、基于端口的虚拟主机

  • 进行实验

1、将多个端口映射到同一IP地址

[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf
还是同样的地方,把两个网站的IP改成一样的,然后端口改成不一样的,分别测试一下!
  • 1
  • 2

在这里插入图片描述 在这里插入图片描述
2、检测端口是否运行正常

在这里插入图片描述
3、在浏览器输入 20.0.0.25:8888,测试成功

在这里插入图片描述
在浏览器输入 20.0.0.25:8000,测试成功

在这里插入图片描述

四、本章问题总结

4.1、-bash: netstat: command not found

  • 当出现这种问题时,显示没有 netstat,这时候我们进行安装netstat

在这里插入图片描述

[root@localhost ~]# yum -y install net-tools 
  • 1
  • 在运行就可以了
    在这里插入图片描述

4.2、-bash: killall: command not found

  • 显示没有killall ,我们要进行安装
    在这里插入图片描述
[root@localhost logs]# yum -y install psmisc
  • 1

4.3、如何通过配置文件查看Nginx是否关闭

  • 这时候就要看 nginx.pid 了
[root@localhost ~]# cd /usr/local/nginx/logs
[root@localhost logs]# ll
  • 1
  • 2

在这里插入图片描述

  • 查看一下 nginx.pid 进程号是 21643
[root@localhost ~]# cat nginx.pid
  • 1

在这里插入图片描述

  • 这时候我们在关闭 nginx,再查看 nginx.pid文件 已经没有了

在这里插入图片描述

  • 再给 nginx 开启,nginx.pid就出现了
[root@localhost ~]# nginx
[root@localhost ~]# ll
  • 1
  • 2

在这里插入图片描述

  • 再查看 nginx.pid 里面的进程号变为了 21651,
    说明 nginx.pid 是用来放进程号的,每次关闭之后再开启,进程号都会变
    在这里插入图片描述
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/73183
 
269 次点击