Nginx

Nginx简介

Nginx(“engine x”)

  • 是俄罗斯人编写的十分轻量级的HTTP服务器
  • 是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器
  • 官方网站: http://nginx.org
nginx的特点
  • 占用内存少,在处理静态文件时,比Apache占用更少的内存及资源
  • 并发能力强 , 支持高达50000个并发连接
  • 性能稳定、几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下进行软件版本的升级。
  • Nginx配置文件非常简洁(还能够支持perl语法)、Bug非常少的服务。
  • 模块化程度高:Nginx是高度模块化的设计,编写模块相对简单 成本低 : Nginx可以做高并发的负载均衡,且Nginx是开源免费的
  • nginx是由c语言编写,支持多个系统
nginx的缺点
  • 动态网页处理比较差,不适合做动态网页
Web服务器对比

Unix和Linux平台下

  • Apache Nginx tengine Lighttpd
  • Tomcat IBM Websphere Jboss

Windows平台下

  • 微软公司的IIS(Internet Informatica Server)

Nginx的安装

下面将用两台虚拟机做实验,其中一台作为nginx服务器(192.168.4.5)
另外一台作为测试用的客户机(192.168.4.10)
已将下载好的源码包传到nginx服务器上,版本为: nginx-1.12.2
需求:*
① 部署nginx软件,支持HTTPS加密
② 客户端访问nginx服务器
在这里插入图片描述

方案:

  • 第一步: 安装依赖包gcc. openssl-devel. pcre-devel 依赖包的作用: gcc 编译工具 openssl-devel 支持正则表达式 pcre-devel 支持安全加密

  • 第二步: 编译模块并安装

  • 第三步 创建nginx用户,开启nginx服务

  • 第四步 客户端进行测试

1.在真机上切换到Linux-soft目录,远程源码包到虚拟机Client以及proxy上

[student@room9pc01 ~]$ cd /linux-soft/02
[student@room9pc01 02]$ ls
ceph10.iso  exam  exam.tar.gz  grade  grade.tar.gz  lnmp_soft.tar.gz
[student@room9pc01 02]$ scp  lnmp_soft.tar.gz  root@192.168.4.10:/root
lnmp_soft.tar.gz                                                                                 100%  155MB  49.9MB/s   00:03    
[student@room9pc01 02]$ scp  lnmp_soft.tar.gz  root@192.168.4.5:/root
lnmp_soft.tar.gz                                                                                 100%  155MB 154.6MB/s   00:01    

2.在虚拟机上解包,proxy做web服务器

[root@proxy ~]# ls  
Desktop  lnmp_soft.tar.gz
[root@proxy ~]# tar -xf  lnmp_soft.tar.gz  
[root@proxy ~]# ls 
Desktop  lnmp_soft  lnmp_soft.tar.gz
[root@proxy ~]# cd  lnmp_soft
[root@proxy lnmp_soft]# ls nginx*
nginx-1.10.3.tar.gz  nginx-1.12.2.tar.gz  nginx-1.15.8.tar.gz  nginx.conf.bak  nginx.spec

3.安装nginx的依赖包

[root@proxy ~]# yum  -y  install gcc openssl-devel pcre-devel    #下载依赖包
[root@proxy ~]# useradd  -s  /sbin/nologin  nginx           #安装普通用户nginx,以普通用户nginx身份启动nginx软件
[root@proxy nginx-1.12.2]# ./configure\                     #指定安装路径,默认安装在/usr/local/nginx目录下

> --user=nginx \                                            #指定用户
> --group=nginx \                                           #指定组
> --with-http_ssl_module                                    #开启ssl加密功能
[root@proxy nginx-1.12.2]# make  &&   make install          #安装
[root@proxy nginx-1.12.2]# ls /usr/local/nginx/             #查看nginx的默认路径
conf  html  logs  sbin
[root@proxy nginx-1.12.2]# /usr/local/nginx/sbin/nginx     #开启nginx服务

4.访问页面
在这里插入图片描述

nginx命令的用法(不能重复开启或关闭服务!)

[root@proxy nginx-1.12.2]# /usr/local/nginx/sbin/nginx #启动服务
[root@proxy nginx-1.12.2]# /usr/local/nginx/sbin/nginx -s stop #关闭服务
[root@proxy nginx-1.12.2]# /usr/local/nginx/sbin/nginx -s reload #重新加载配置文件 (不关闭服务的情况下重新加载配置文件,只能在服务开启的状态下使用)
[root@proxy nginx-1.12.2]# /usr/local/nginx/sbin/nginx -V #查看软件信息
[root@proxy nginx-1.12.2]# /usr/local/nginx/sbin/nginx -c #指定配置文件,启动服务

netstat 命令

-a显示所有端口的信息
-n以数字格式显示端口号
-t显示TCP连接的端口
-u显示UDP连接的端口
-l显示服务正在监听的端口信息,如httpd启动后,会一直监听80端口
-p显示监听端口的服务名称是什么(也就是程序名称)

5.查看当前端口

[root@proxy nginx-1.12.2]# netstat  -anutlp  | grep  :80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      28316/nginx: master 

写一个脚本自动安装nginx软件,以及控制nginx软件的小工具.仅适用学习环境

[root@localhost opt]# vim nginx.sh  ##安装nginx软件
#!/bin/bash
#这是一个基于ip已配好,yum仓库正常运行的情况下,自动安装nginx并启动服务的脚本,此脚本仅供参考
rpm -q expect &> /dev/null
if [ $? -eq 0 ];then
a=`awk -F/ 'NR==3{print $3}' /etc/yum.repos.d/local.repo`
expect << EOF
set timeout 2
spawn  scp -r student@$a:/linux-soft/02/lnmp_soft.tar.gz  /opt 
expect "(yes/no)"  { send "yes\r" }
expect "password:"   { send "student\r" }
expect "#"          { send "exit\r" }
EOF
yum -y install gcc openssl-devel pcre-devel &> /dev/null
tar -xf /opt/lnmp_soft.tar.gz -C /opt
tar -xf /opt/lnmp_soft/nginx-1.12.2.tar.gz -C /opt
cd  /opt/nginx-1.12.2
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module  &> /dev/null
make && make install  &> /dev/null
useradd -s /sbin/nologin nginx
#systemctl stop firewalld   ##安装有防火墙就需要这一步
/usr/local/nginx/sbin/nginx
else
echo "启动此脚本需要下载expect软件" && exit
fi
[root@localhost opt]# chmod +x nginx.sh
[root@localhost opt]# vim nginx  ##控制nginx软件
#!/bin/bash
#这是一个简单的控制nginx服务脚本,此脚本仅供参考
case $1 in
start|s)
        netstat -ntulp | grep -q nginx
        [ $? -eq 0 ] && echo -e "\033[31m nginx已经开启了\033[0m" && exit
        /usr/local/nginx/sbin/nginx;;
stop|p)
        netstat -ntulp | grep -q nginx
        [ $? -ne 0 ] && echo -e "\033[32m nginx已经关闭了\033[0m" && exit
        /usr/local/nginx/sbin/nginx -s stop;;
restart|res)
        /usr/local/nginx/sbin/nginx -s stop
        /usr/local/nginx/sbin/nginx;;
reload|r)
        /usr/local/nginx/sbin/nginx -s reload;;
V|v)
        /usr/local/nginx/sbin/nginx -V;;
vim)
        vim /usr/local/nginx/conf/nginx.conf;;
net|n)
        netstat -ntulp | grep -q nginx
        [ $? -eq 0 ] && echo -e "\033[33m nginx服务已开启\033[0m" || echo -e "\033[34m nginx服务未开启\033[0m";;
*)
        echo "请输入s|p|res|n|r|v|vim"
esac
[root@localhost opt]# chmod +x nginx
[root@localhost opt]# echo "alias nginx='/opt/nginx.sh'" >> ~/.bashrc

nginx配置解析

nginx配置文件结构

在这里插入图片描述

  • /usr/local/nginx/conf/nginx.conf --> nginx的主配置文件
  • /usr/local/nginx/html -->网页目录
  • /usr/local/nginx/logs —>日志文件
  • /usr/local/nginx/sbin ----->主程序文件

在这里插入图片描述

用户认证

需求:
访问Web页面需要进行用户认证
用户名为:tom,密码为:123456
如图:
在这里插入图片描述
方案:

1.安装httpd-tools(httpd默认包含)
2.创建用户和密码
3.书写配置文件
4.重置服务配置文件
5.客户端访问测试

1.修改nginx默认配置文件

[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
    server {
        listen       80;                       #端口
        server_name  localhost;                #域名
        auth_basic   "Input password";         #认证提示符信息(引号内内容随便写),分号不要忘记!!
        auth_basic_user_file   "/usr/local/nginx/pass";     #认证的密码文件(引号内容随便写)

location / {
            root   html;                        #网页默认存放路径(相对路径)
            index  index.html index.htm;        #默认首页

2.安装软件包httpd-tools

[root@proxy ~]# yum -y  install httpd-tools

3.创建一个网站的密码文件,必须要和主配置文件中的密码文件名称一样!

[root@proxy ~]# htpasswd  -c  /usr/local/nginx/pass  tom                     #-c 创建用户,如果想要追加用户,取消-c选项
New password:                                                                #创建密码
Re-type new password:                                                        #确认密码
Adding password for user tom
[root@proxy ~]# cat  /usr/local/nginx/pass                                #查看是否创建成功
aaa:$apr1$/9hHDZlP$iEVxjJUJ.BbayeztwJn/B/

4.重新加载配置文件

[root@proxy ~]# /usr/local/nginx/sbin/nginx   -s  reload

5.测试访问,此时进入页面需要用户密码
在这里插入图片描述

三种模式的虚拟主机

基于域名的虚拟主机

在这里插入图片描述
一个软件包可以做多个虚拟网站,叫做虚拟主机
实现两个基于域名的虚拟主机,分别叫www.a.com和www.b.com
对域名为www.a.com的站点进行用户认证,用户名称为tom,密码为123456

方案:
修改Nginx配置文件,添加server容器实现虚拟主机功能;
对于需要进行用户认证的虚拟主机添加auth认证语句。
虚拟主机一般可用分为:基于域名、基于IP和基于端口的虚拟主机。

1.修改配置文件,添加相关虚拟主机配置


 [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
  server {                                        #第一个虚拟主机
        listen       80;
        server_name  www.a.com;
        auth_basic   "Input password";
        auth_basic_user_file   "/usr/local/nginx/pass";
        
          location / {                           #指定网站根路径
            root   html;
            index  index.html index.htm;
            }
       }

  server {                                        #第二个虚拟主机
        listen       80;
        server_name  www.b.com;
       charset  utf-8;                            #支持中文
        location / {
            root   www;
            index  index.html index.htm;
        }
    }    

2.创建网页根目录及首页文件

[root@proxy ~]# mkdir /usr/local/nginx/www
[root@proxy ~]# echo "wo shi wang ye "  >  /usr/local/nginx/www/index.html

3.重起网页

[root@proxy ~]# /usr/local/nginx/sbin/nginx  -s reload
#请先确保nginx是启动状态,否则运行该命令会报错,报错信息如下:
#[error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)

4.用192.168.4.10作为客户端访问网页
注意:请先关闭真实机的firefox,再SSH -X远程连接调用虚拟机的firefox。

[root@client ~]# vim /etc/hosts
 #::1           localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1       localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.4.5     www.a.com   www.b.com                                #添加虚拟主机的域名
[root@client ~]# exit
登出
Connection to 192.168.4.10 closed.
[student@room9pc01 ~]$ ssh  -X  root@192.168.4.10                  #一定要加-X选项
[root@client ~]# firefox  www.a.com                                #输入用户名密码登录
[root@client ~]# firefox  www.b.com
要想客户机支持中文,下载软件包,服务端输入charset  utf-8
[root@client ~]# yum  list |  grep chinese  | grep google
google-noto-sans-simplified-chinese-fonts.noarch                 #简体中文包
google-noto-sans-traditional-chinese-fonts.noarch                #繁体中文包
[root@client ~]# yum -y install google-noto-sans-simplified-chinese-fonts.noarch

解析出www.a.com出现以下页面
在这里插入图片描述
解析出www.b.com出现以下页面
在这里插入图片描述

基于端口的虚拟主机

在这里插入图片描述
问题:
实现两个基于端口的虚拟主机,端口号分别为8080和8000
对域名为www.a.com的站点进行用户认证,用户名称为tom,密码为123456

方案:
1.修改Nginx服务配置,添加相关虚拟主机配置
3.重新加载配置
4.客户端测试

[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
 35     server {
 36         listen       8080;(实验需修改)
 37         server_name  www.a.com;  
 38         auth_basic "Input Password:";
 39         auth_basic_user_file  "/usr/local/nginx/pass";
 
 85     server {
 86         listen       8000; (实验需修改)
 87         server_name  www.b.com; 
 88 
 89         location / {
 90             root   www;  
 91             index  index.html index.htm;

[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
[root@proxy ~]# firefox  www.a.com:8080   ##输入密码后页面出现AAA
[root@proxy ~]# firefox  www.b.com:8000   ##页面出现BBB
基于IP的虚拟主机

在这里插入图片描述
问题:
实现两个基于IP的虚拟主机,IP地址分别为192.168.4.207和192.168.2.208
对IP为192.168.4.207的站点进行用户认证,用户名称为tom,密码为123456

方案:
1.修改Nginx服务配置,添加相关虚拟主机配置
3.重新加载配置
4.客户端测试


[ro[root@proxy ~]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.4.207  netmask 255.255.255.0  broadcast 192.168.4.255
ot@proxy2 ~]# setip
Network name(eth0/eth1/eth2/eth3):eth1
Set IP(IP/24):192.168.2.208/24
Set Gateway(default none):0.0.0.0
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
 35     server {
 36         listen       192.168.4.5:80;(实验需修改)
 37         #server_name  www.a.com;  
 38         auth_basic "Input Password:";
 39         auth_basic_user_file  "/usr/local/nginx/pass";
 40         location / {
 41             root   html;  
 42             index  index.html index.htm;

 85     server {
 86         listen      192.168.2.6:80; (实验需修改)
 87         #server_name  www.b.com; 
 88 
 89         location / {
 90             root   www;  
 91             index  index.html index.htm;

[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
[root@proxy ~]# firefox  192.168.4.5   ##输入密码后页面出现AAA
[root@proxy ~]# firefox  192.168.2.6   ##页面出现BBB
[root@proxy nginx]# curl 192.168.4.5
AAA
[root@proxy nginx]# curl 192.168.2.6
BBB

HTTPS加密网站

  • 源码安装Nginx时必须使用–with-http_ssl_module参数,启用加密模块,对于需要进行SSL加
  • 密处理的站点添加ssl相关指令(设置网站需要的私钥和证书)。
  • 加密算法一般分为对称算法、非对称算法、信息摘要。
  • 对称算法有:AES、DES,主要应用在单机数据加密。(对称秘钥,应用:RAR,ZIP单机加密)
  • 非对称算法有:RSA、DSA,主要应用在网络数据加密。(非对称秘钥, 应用:HTTPS,SSH)
  • 信息摘要:MD5、sha256,SHA512主要应用在数据完整性校验。(hash值,应用文件校验值)

问题
域名为www.c.com
该站点通过https访问
通过私钥、证书对该站点所有数据加密

方案
1)生成私钥与证书
2)修改Nginx配置文件,设置加密网站的虚拟主机
3)重新加载配置
4 ) 客户端验证

 [root@proxy ~]# cd  /usr/local/nginx/conf/
[root@proxy conf]# openssl   genrsa  > cert.key                #生成私钥
Generating RSA private key, 2048 bit long modulus
................+++
.............+++
e is 65537 (0x10001)
[root@proxy conf]# openssl  req  -new -x509  -key  cert.key   >  cert.pem       #生成公钥
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]:cn                            #国家
State or Province Name (full name) []:beijing                   #城市
Locality Name (eg, city) [Default City]:shenzhen                #城市
Organization Name (eg, company) [Default Company Ltd]:lalalal   #公司名
Organizational Unit Name (eg, section) []:bababba               #组织单位名
Common Name (eg, your name or your server's hostname) []:hahah  #名字
Email Address []:aa@aa.com                                      #邮件地址
[root@proxy conf]# ls cert.key 
cert.key
[root@proxy conf]# ls cert.pem 
cert.pem

2.修改配置文件

[root@proxy conf]# vim  /usr/local/nginx/conf/nginx.conf
 server {
    listen       443 ssl;                      #加密端口默认443
    server_name  www.c.com;                     #修改域名

    ssl_certificate      cert.pem;             #公钥
    ssl_certificate_key  cert.key;             #私钥 

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

    location / {
        root   html;                         #网页根目录
        index  index.html index.htm;
    }
}
}
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload

3.在客户端访问网页

[root@client ~]# vim /etc/hosts                                   #添加www.c.com
192.168.4.5     www.a.com   www.b.com  www.c.com
[root@client ~]# firefox  https://www.c.com

客户端出现以下页面:
在这里插入图片描述

hash值用法

[root@proxy conf]# touch a.txt
[root@proxy conf]# echo ABC > a.txt
[root@proxy conf]# md5sum a.txt   
0bee89b07a248e27c83fc3d5951213c1  a.txt  
[root@proxy conf]# echo . >> a.txt 
[root@proxy conf]# cat a.txt 
abc
.
[root@proxy conf]# md5sum a.txt 
fd8514d54a41010d6e512a9b083256ba  a.txt  ##hash值发生变化
[root@proxy conf]# sed -i '2d' a.txt   ##删掉.
[root@proxy conf]# cat a.txt 
abc
[root@proxy conf]# md5sum a.txt 
0bee89b07a248e27c83fc3d5951213c1  a.txt  ##恢复校验值
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值