Nginx

Nginx简介

  • Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也是一个IMAP/POP3/SMTP代理服务器。
  • 是俄罗斯人编写的十分轻量级的HTTP服务器
  • 官方网站: 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服务

  • 第四步
    客户端进行测试

 nginx命令的用法:
[root@proxy ~]# /usr/local/nginx/sbin/nginx                    #启动服务
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s stop            #关闭服务
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload        #重新加载配置文件
[root@proxy ~]# /usr/local/nginx/sbin/nginx -V                #查看软件信息
[root@proxy ~]# /usr/local/nginx/sbin/nginx -c                 #指定配置文件,启动服务
netstat命令可以查看系统中启动的端口信息,跟ss的用法一致,该命令常用选项如下:
-a显示所有端口的信息
-n以数字格式显示端口号
-t显示TCP连接的端口
-u显示UDP连接的端口
-l显示服务正在监听的端口信息,如httpd启动后,会一直监听80端口
-p显示监听端口的服务名称是什么(也就是程序名称)
[root@proxy ~]# yum -y install gcc openssl-devel pcre-devel  ##下载依赖包
[root@proxy opt]# tar xf nginx-1.12.2.tar.gz  ##解包
[root@proxy ~]# cd  nginx-1.12.2
[root@proxy nginx-1.12.2]# ./configure   \
--prefix=/usr/local/nginx   \                #指定安装路径
--user=nginx   \                            #指定用户
--group=nginx  \                            #指定组
--with-http_ssl_module                    #开启SSL加密功能
[root@proxy nginx-1.12.2]# make && make install     ##编译并安装
[root@proxy ~]# useradd -s /sbin/nologin nginx    ##创建用户.shell环境为不可登录
[root@proxy ~]# /usr/local/nginx/sbin/nginx   ##开启nginx服务
[root@proxy ~]# netstat  -anptu  |  grep nginx  (查看端口信息)
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      7383/nginx: master  
[root@client ~]# curl -I 192.168.4.5  ##进行页面测试
HTTP/1.1 200 OK  (代表页面访问正常)
Server: nginx/1.12.2
Date: Tue, 31 Dec 2019 09:21:51 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 31 Dec 2019 09:00:58 GMT
Connection: keep-alive
ETag: "5e0b0e4a-264"
Accept-Ranges: bytes
[root@client ~]# firefox 192.168.4.5

写一个脚本自动安装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.客户端访问测试

以下的步骤是基于上面的基础

[root@proxy ~]# yum -y install httpd   
[root@proxy ~]# htpasswd -c /usr/local/nginx/pass  tom  ##创建tom用户  追加用户不用-c选项
New password: 
Re-type new password: 
Adding password for user tom
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
 38         auth_basic "Input Password:";
 39         auth_basic_user_file  "/usr/local/nginx/pass";
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload  
[root@client ~]# firefox 192.168.4.5  ##输入用户名及密码后即可访问

三种模式的虚拟主机

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

方案:
1.修改Nginx服务配置,添加相关虚拟主机配置
2.创建网站根目录及对应首页文件
3.重新加载配置
4.客户端测试

[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
 35     server {
 36         listen       80;
 37         server_name  www.a.com;  ##(实验需修改)
 38         auth_basic "Input Password:";
 39         auth_basic_user_file  "/usr/local/nginx/pass";
 
 85     server {
 86         listen       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 ~]# mkdir /usr/local/nginx/www   ##创建网页目录
[root@proxy ~]# echo "AAA" > /usr/local/nginx/html/index.html  
[root@proxy ~]# echo "BBB" > /usr/local/nginx/www/index.html   
[root@client ~]# vim /etc/hosts  ##修改域名解析文件
192.168.4.5  www.a.com  www.b.com
[root@proxy ~]# vim /etc/hosts
192.168.4.5  www.a.com  www.b.com
[root@proxy ~]# firefox  www.a.com   ##输入密码后页面出现AAA
[root@proxy ~]# firefox  www.b.com  ##页面出现BBB
[root@client ~]# firefox  www.a.com   ##输入密码后页面出现AAA
[root@client ~]# firefox  www.b.com  ##页面出现BBB
注意事项:
nginx网页内容默认不支持中文,所以打中文会出现乱码,修改配置文件
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
40         charset utf-8;  (修改成utf-8)  
89         charset utf-8;
[root@proxy ~]# echo "地中海" > /usr/local/nginx/html/index.html
[root@proxy ~]# echo "小田田" > /usr/local/nginx/www/index.html
[root@client ~]# yum -y install google-noto-sans-simplified-chinese-fonts.noarch
[root@client ~]# curl www.a.com
地中海
[root@client ~]# curl 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地址分别为192.168.4.5和192.168.2.6
对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.5  netmask 255.255.255.0  broadcast 192.168.4.255
ot@proxy ~]# setip
Network name(eth0/eth1/eth2/eth3):eth1
Set IP(IP/24):192.168.2.6/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                      ##生成私钥
[root@proxy ~]# openssl req -new -x509 -key cert.key > cert.pem   ##生成证书(公钥)
[root@proxy ~]# vim  /usr/local/nginx/conf/nginx.conf
108     server {
109         listen       443 ssl;
110         server_name  www.c.com; (实验需修改)
111         ssl_certificate      cert.pem;   #这里是证书文件
112         ssl_certificate_key  cert.key;   #这里是私钥文件
113 
114         ssl_session_cache    shared:SSL:1m;
115         ssl_session_timeout  5m;
116 
117         ssl_ciphers  HIGH:!aNULL:!MD5;
118         ssl_prefer_server_ciphers  on;
120 
121         location / {
122             root   html;
123             index  index.html index.htm;
124         }
125     }
126 
127 }
[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload
[root@client ~]# vim /etc/hosts
192.168.4.5    www.c.com  www.a.com   www.b.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  ##恢复校验值
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值