目录
案例三: nginx 虚拟主机(基于域名、基于IP、基于端口)
nginx简介
-
是俄罗斯人编写的轻量级的HTTP服务器
-
是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP代理服务器
可以作为Web服务器的有:
Unix和Linux平台下有:
- Apache、Nginx、Tengine、 Lighttpd、
- Tomcat、 IBM WebSpgere、 Jboss (这一排只能做java的网站)
Windows平台下:
- 微软公司的IIS(internet information server)
总结:在同样配置的情况下nginx的性能更高、消耗内存更低,并发量更高(并发量指:同时访问的数量)。现在新的项目中大多数是用的Nginx。
新浪、淘宝用的都是nginx,淘宝在nginx基础上做了Tengine 。
实验环境:
client | 192.168.35.137 | ens33 |
proxy | 192.168.35.134 | ens33 |
proxy | 192.168.0.5 | ens37 |
需要用的软件包:lnmp_soft.tar.gz
采用的方式是:scp lnmp_soft.tar.gz 192.168.35.134 /root/
案例一:nginx安装与升级
采用 源码安装 的方式
源码装包的流程:手动装依赖包;手动创建用户;手动解包;手动指定用户和组;最后在编译。
1)、安装依赖包:
[root@porxy ~]# yum -y install gcc pcre-devel openssl-devel // gcc是c语言的解释器,pcre-devel是正则表达式,openssl-devel是用来加密和解密的。
[root@porxy ~]# useradd -s /sbin/nologin nginx //创建普通用户
[root@porxy ~]# tar -xf nginx-1.20.1.tar.gz
这一步是root使用普通用户的功能起的服务,(即在执行这条命令时就变成了普通用户nginx敲的,为了保证数据的安全。)
[root@porxy nginx-1.20.1]# ./configure \
> --user=nginx \ //指定用户
> --group=nginx \ //指定组
> --with-http_ssl_module \ //开启SSL加密功能
> --prefix=/usr/local/nginx //指定安装路径
[root@porxy nginx-1.20.1]# make && make install //编译(把英文转换成二进制的程序)
检查是否安装成功:
[root@porxy nginx]# ls //查看nginx下有没有东西
conf html logs sbin
2)、源码安装的包需要手动起服务:
[root@porxy ~]# /usr/local/nginx/sbin/nginx //手动起服务只能启动一次,启动第二次会报错。
#第二次可使用重新加载配置方式。
nginx启动、暂停、加载命令:
[root@porxy ~]# /usr/local/nginx/sbin/nginx //启动服务
[root@porxy ~]# /usr/local/nginx/sbin/nginx -s stop //暂停服务
[root@porxy ~]# /usr/local/nginx/sbin/nginx -s reload //重新加载配置文件 [root@porxy ~]# /usr/local/nginx/sbin/nginx -V //查看软件信息
备注:Nginx没有重启命令,可以使用重新加载配置文件。
3)、测试首页文件:
[root@porxy ~]# curl http://192.168.35.134
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
安装完毕!
步骤一:平滑升级nginx服务器
升级版本不需要升级配置文件conf、升级网页html、日志文件logs。
只需要升级主程序sbin ,升级时可以跨版本升级,版本不易跨太大,否则会出现兼容的问题。
新版本替换旧版本,替换时,把老的程序备份一下,以防后期新版本有问题再继续使用。
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old
cp /nginx-1.20.1/objs/nginx /usr/local/sbin/nginx
ls /usr/local/sbin/ //此时就会出现新的包 和备份的老的包
再nginx路径下 make upgrade //杀死老的进程,但一般这个命令会出现问题,可以执行 killall nginx 最后再重启服务 /usr/local/nginx/sbin/nginx
案例二:nginx 服务器 用户认证(用户名密码)
需求:
在案例一的基础上。通过调整nginx服务端配置,实现以下目标:
1、访问web页面需要进行用户认证
2、用户名为:tom,密码为:123456
方案:
通过nginx实现web页面的认证,需要修改nginx的配置文件,在配置文件中添加auth语句实现用户认证,最后使用htpasswd命令创建用户及密码。
(案例一已经创建了网页,此时做用户认证,限制用户访问。)
1)修改nginx的配置文件:添加两行信息:认证提示符信息、认证的密码文件
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"; #认证的
密码文件
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html; #网站的根目录
index index.html index.htm; #index index.html是之默认首页,后面还有一个index.html是防止第一个网页找不到继续找第二个,如果第二个再找不到就会出现报错。(index 后面写谁,谁就是默认首页)
}
2)生成密码文件。创建用户及密码
先安装依赖包:[root@porxy ~]# yum install -y http-tools
再使用htpasswd命令创建账户文件:
[root@porxy ~]# htpasswd -c /usr/local/nginx/pass tom //添加用户tom,密码是123456
New password:
Re-type new password:
Adding password for user tom
[root@porxy ~]# cat /usr/local/nginx/pass
tom:$apr1$ETzsVba3$Rj7RiBAe2wJUMsZsncMc7.
如果还需要追加用户时,不使用参数-c选项
[root@porxy ~]# htpasswd /usr/local/nginx/pass jerry
New password:
Re-type new password:
Adding password for user jerry
[root@porxy ~]# cat /usr/local/nginx/pass
tom:$apr1$ETzsVba3$Rj7RiBAe2wJUMsZsncMc7.
jerry:$apr1$2v9zt153$ppz46v000kuAhjqCeRasQ0
3)重新加载配置:
[root@porxy ~]# /usr/local/nginx/sbin/nginx -s reload
4)客户端验证:
在浏览器出入IP地址,会出现需要输入用户名和密码,输入正确即可进入界面。
案例三: nginx 虚拟主机(基于域名、基于IP、基于端口)
需求:
沿用案例二,配置基于域名的虚拟主机,实现以下目标:
实现两个基于域名的虚拟主机,域名分别为www.a.com和www.b.com 对域名为www.a.com的站点进行用户认证,用户名称为tom,密码为123
方案:
修改nginx配置文件,添加server容器实现虚拟主机功能;对于需要进行用户认证的虚拟主机添加auth认证语句 虚拟主机一般可用分为:基于域名,基于ip和基于端口的虚拟主机
安装nginx后,会有默认的网页,但实际中一个不够用,需要添加多网页
1).修改Nginx服务配置,添加相关虚拟主机配置如下
[root@porxy ~]# 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"; #认证的
密码文件
#charset koi8-r;
location / {
root html;
index index.html index.htm;
}
server {
listen 80;
server_name www.b.com;
location / {
root www;
index index.html index.htm;
}
}
2)、创建网站根目录及对应的首页文件
[root@porxy ~]# mkdir /usr/local/nginx/www
[root@porxy ~]# echo "www"> /usr/local/nginx/www/index.html
3)、重新加载配置:
[root@porxy ~]# /usr/local/nginx/sbin/nginx -s reload
4)、客户端测试:192.168.35.137 先添加域名解析
[root@client ~]# vim /etc/hosts //本地域名解析文件,也称单机版解析文件
192.168.35.134 www.a.com www.b.com
[root@client ~]# ping www.a.com
[root@client ~]# ping www.b.com
案例四:HTTPS加密网站 (SSL虚机主机)
问题:
沿用练习三、配置基于加密网站的虚拟主机,实现以下目标:
1、域名为www.c.com 2、该站点通过https访问 3、通过私钥、证书对该站点的所有数据进行加密 方案:
源码安装Nginx时,必须使用--with-http_ssl_module参数,启用加密模块,对于需要进行SSL加密处理的站点添加SSL相关指令(设置网站需要的私钥和证书)。
步骤一:配置SSL虚拟主机
生成私钥和证书
[root@porxy ~]# cd /usr/local/nginx/conf
[root@porxy conf]# openssl genrsa > cert.key //生成私钥
Generating RSA private key, 2048 bit long modulus
..............................................................................................................................+++
........................+++
e is 65537 (0x10001)
[root@porxy conf]# openssl req -new -x509 -key cert.key > cert.pem //生成证书
Country Name (2 letter code) [XX]:cn //所在国家
State or Province Name (full name) []:SHANXI //所在省份
Locality Name (eg, city) [Default City]:xian //所在城市
Organization Name (eg, company) [Default Company Ltd]:oupeng //所在机构
Organizational Unit Name (eg, section) []:it //所在部门
Common Name (eg, your name or your server's hostname) []:porxy // 服务器的名字
Email Address []:1232@163.com //邮箱
2)修改Nginx配置文件,设置加密网站的虚拟主机
[root@porxy conf]#vim /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;
ssl_prefer_server_ciphers on;
location / {
root html; //打开的网页
index index.html index.htm;
}
}
3)、 在客户端验证:192.168.35.137 先添加域名解析
[root@client ~]# vim /etc/hosts //本地域名解析文件,也称单机版解析文件
192.168.35.134 www.a.com www.b.com www.c.com
[root@client ~]# ping www.c.com