文章目录
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
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
测试成功
基于端口的虚拟主机
大体上和基于域名的一样
基于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 #最多允许几个进程处于空闲