Nginx基础

Nginx

nginx和httpd一样,都是提供web服务的一个软件,在同样配置下,消耗的资源更小

Web服务器的对比

  • unix和Linux下

    –Apache、Nginx、Tengine(淘宝二次开发nginx)、Lighttpd

    –Tomcat、IBM WebSphere、jboss(特指jave网站)

  • Windows平台下

    –微软公司的IIS(Internet Information Server)

Nginx简介

Nginx(“engine x”)

  • 是俄罗斯人编写的十分轻量级的HTTP服务器
  • 是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP代理服务器
  • 官方网站:http://nginx.org

nginx的搭建

案例1:搭建Nginx服务器

要求:

  • 支持ssl加密功能

  • 设置Nginx账户及组名称均为nginx

  • nginx服务器升级到更高版本

测试:

  • 使用浏览器访问
  • 使用curl测试
步骤一

1.使用源码包安装nginx

先安装相应的依赖包
yum -y install gcc pcre-devel openssl-devel make #pcre-devel使用正则表达式的软件包,openssl-devel加密网站的软件包
创建相应的nginx的用户
useradd -s /sbin/nologin nginx  #创建的用户不允许登录
上传相应的软件包到服务器上,并进行解压安装
tar -xf nginx-1.18.0.tar.gz 
cd nginx-1.18.0/
./configure \
 --prefix=/usr/local/nginx \  #指定安装路径,这个路径也是源码安装的默认路径
 --user=nginx \               #指定用户,防止其他人恶意攻击
 --group=nginx \            #指定组
 --with-http_ssl_module       #开启ssl加密功能  --with-模块名称
 make && make install

nginx下载可以去官方网站下载:http://nginx.org/en/download.html
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2RTM9Jzu-1630044896205)(E:/Typort/image-20210826145909167.png)]

2.nginx命令的用法

/usr/local/nginx/sbin/nginx   #启动服务,或者进入目录直接执行
/usr/local/nginx/sbin/nginx -s stop   #关闭服务
/usr/local/nginx/sbin/nginx -s reload   #重新加载配置文件
/usr/local/nginx/sbin/nginx -V   #查看软件信息
ln -s /usr/local/nginx/sbin/nginx  /sbin/   #创建链接,方便后期使用 

使用netstat命令可以查看系统中启动的端口信息,该命令常用选项如下:
-a 显示所有端口的信息
-n 以数字格式显示端口号
-t 显示tcp连接的端口
-u 显示udp连接的端口
-l 显示服务正在监听的端口信息,如httpd启动后,会一直监听80端口
-p 显示监听端口的服务名称是什么,也就是程序名称

3.设置防火墙与selinux(非必须的操作,如果有就关闭)

systemctl stop firewalld.service 
setenforce 0

4.测试网页

Nginx服务默认首页文档存储目录为 /usr/local/nginx/html/,在此目录下默认有一个名为index.html的文件,使用客户端测试
在这里插入图片描述

步骤二

1.编译新版本的nginx软件

可以在升级的时候添加之前旧版本未安装的模块,可以跨版本升级(一般不建议跨太多版本)
升级到1.20.1版本
tar -xf nginx-1.20.1.tar.gz 
cd nginx-1.20.1/
./configure \
 --prefix=/usr/local/nginx \  #指定安装路径,这个路径也是源码安装的默认路径
 --user=nginx \               #指定用户,防止其他人恶意攻击
 --group=nginx \             #指定组
 --with-http_ssl_module    
 make              #编译

2.备份老的nginx主程序,并使用编译好的新版本nginx替换老版本

mv /usr/local/nginx/sbin/nginx  /usr/local/nginx/sbin/nginx.old  #备份老的nginx主程序,如果新版出现问题,可以还原为老版本
cp /root/nginx-1.20.1/objs/nginx /usr/local/nginx/sbin/ 
#把新版本的nginx主程序复制过去,替换老版本
make upgrade   
#或者使用killall nginx 杀死nginx进程后重启nginx
/usr/local/nginx/sbin/nginx -V  #查看是否更新成功

由图看出更新成功
在这里插入图片描述

案例二:用户认证

1.问题:

沿用案例1,调整nginx的服务配置,实现以下目标

  • 访问web页面需要用户认证
  • 用户名为:tom,密码为:123

2.方案:

通过Nginx实现web界面的认证,需要修改nginx的配置文件,在配置文件中添加auth语句实现用户认证,最后使用htpasswd命令创建用户及密码即可

3.操作

1)修改配置文件(/usr/local/nginx/conf/nginx.conf)

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;    #相对路径html存放位置
            index  index.html index.htm;  #默认主页,优先index.html,如果未找到index.html,则就会使用index.htm
        }
...

2)生成密码文件,创建用户及密码

 yum -y install httpd-tools.x86_64   #安装这个软件,提供httpd认证服务
 #可以使用htpasswd命令,这个命令也在这个软件里
htpasswd -c /usr/local/nginx/pass tom  #创建认证用户tom
New password:                 #设置密码
Re-type new password: 
Adding password for user tom
也可以添加认证用户
htpasswd  /usr/local/nginx/pass jerry    #追加用户,不使用-c选项

在这里插入图片描述

3)重新加载配置

/usr/local/nginx/sbin/nginx -s reload

4)测试
在这里插入图片描述

添加成功
在这里插入图片描述

案例三:基于域名的虚拟主机

问题:

沿用案例二,配置基于域名的虚拟主机,实现以下目标:

  • 实现两个基于域名的虚拟主机,域名分别为www.a.com和www.b.com
  • 对域名为www.a.com的站点进行用户认证,用户名称为tom,密码为123

方案:

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

步骤

1.修改Nginx服务配置,添加相关虚拟主机配置如下

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;  #默认主页,优先index.html,如果未找到index.html,则就会使用index.htm
        }

 server {
        listen       80;       #端口
        server_name  www.b.com;           #域名
     
        location / {
            root   www;     #指定网站根路径
            index  index.html index.htm;  #默认主页,优先index.html,如果未找到index.html,则就会使用index.htm
        }
}
...

2.创建网站根目录及对应的首页文件

mkdir /usr/local/nginx/www
echo "ceshi" > /usr/local/nginx/www/index.html

3.重新加载配置

/usr/local/nginx/sbin/nginx -s reload

4.客户端测试

应该我们并没有专门去搭建一个dns服务器,所以修改另一台客户端的hosts文件,进行域名解析

vim /etc/hosts
192.168.19.100 www.a.com   www.b.com

在这里插入图片描述

测试成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zAx2wud6-1630044896214)(E:/Typort/image-20210826171637861.png)]

基于端口的虚拟主机

大体上和基于域名的一样

在这里插入图片描述

基于IP的虚拟主机(默认所有ip)

在这里插入图片描述

案例四:SSL虚拟主机

问题:

沿用练习三、配置基于加密网站的虚拟主机,实现以下目标

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

方案:

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

对称算法(123 - 123) 加密和解密同一把密钥

非对称算法 (123 - qwe)公钥加密,私钥解密

步骤:

1.配置SSL虚拟主机

1)生成私钥与证书

cd /usr/local/nginx/conf
openssl genrsa > cert.key   #生成私钥
openssl req -new -x509 -key cert.key >cert.pem #生成证书,x509证书格式

在这里插入图片描述

2)修改Nginx配置文件,设置加密网站的虚拟主机

 vim /usr/local/nginx/conf/nginx.conf
...
server {
        listen       443 ssl;
        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;   #高等级加密,密码不能为空,不能使用md5加密
        ssl_prefer_server_ciphers  on;

        location / {
            root   html;
            index  index.html index.htm;
        }
    }
...
重启配置文件
/usr/local/ngin/sbin/nginx -s reload

2.客户端测试

1)修改客户端主机的hosts我呢见,进行手动解析

vim /etc/hosts
192.168.19.100 www.a.com   www.b.com   www.c.com

2)进行测试

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

Nginx动静分离

nginx结合FastCGI技术即可支持php页面架构,如下图所示

  • 用户访问nginx
  • 如哦用户访问的是静态数据,则到html目录找,直接返回
  • 如果用户访问的是动态脚本,到html目录找,转发给fpm(9000端口)
  • fpm是个多进程软件
  • location 静态 {allow all }
  • location 动态 {转发给FPM}

在这里插入图片描述
查看php-fpm配置文件(默认一般不需要修改)

cat /etc/php-fpm.d/www.conf | grep -v "^;"  | grep -v "^$"
[www]
user = apache
group = apache
listen = /run/php-fpm/www.sock
listen.acl_users = apache,nginx
listen.allowed_clients = 127.0.0.1   
pm = dynamic
pm.max_children = 50     #最大进程数
pm.start_servers = 5                 #最小进程数
pm.min_spare_servers = 5             #最少需要几个空闲进程
pm.max_spare_servers = 35            #最多允许几个进程处于空闲
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值