用户认证:
用户必须输入用户名和密码才能访问网页
vim /usr/local/nginx/conf/nginx.conf
两行需要配置
auth_basic "hello:"; //认证提示符""里面的内容自己写
auth_basic_user_file "/usr/local/nginx/pass"; //认证密码文件,pass文件自己创建自己写
server{
listen 80; //指定端口号,一定要以分号结尾
server_name localhost;
auth_basic "Input Password:"; //认证提示符,""里面的提示信息自己写,不能是中文
auth_basic_user_file "/usr/local/nginx/pass"; //认证密码文件,pass文件需要用httpd-tools创建
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m; //超时时间限制
location / {
root html; //网页根目录在哪
index a.html; //自己写一个
}
这个pass文件要想生效,需要先去装httpd-tools
htpasswd -c /user/local/nginx/pass 用户名
//用htpasswd -c命令去创建第一个用户,只有第一次创建登陆用户使用 -c,第二次再想追加用户 去掉 -c
//密码自己敲,会自动变成密文存进这个文件,可以直接cat看效果
要想建更多的用户:
htpasswd /user/local/nginx/pass 用户名
//追加创建用户不用-c
再/usr/local/nginx/sbin/nginx -s reload 重启
*****************************************************************************************************************
虚拟主机基于域名:
客户端访问不同的域名看到不同的网页,但是多个网页都是一台nginx服务器提供的,这个功能在nginx叫虚拟主机
可以在/usr/local/nginx/conf/nginx.conf中的anoter virtual host下面的那个server做另一个域名网站,去掉server里的注释改成
server{
listen 80; //这里的端口也可以写80,同一个端口多个网页可以复用,也可以写别的端口
server_name www.b.com; //如果上面定义了非80端口,客户端访问www.b.com:端口号 的方式来访问该网页
location / {
root www; //网站根目录在哪,www没有去/usr/local/nginx下去创建,html能作为网页根目录是同理的
index index.html; //index.html自己创建,名字无所谓多个网页如果在同一个目录下不重名即可
charset utf-8; //让网页支持中文,否则网页里写中文就是乱码
}
}
以上都操作完了,重启nginx
但是此时客户端没有域名解析,可以配置
vim /etc/hosts //本地域名解析文件
192.168.10.10 www.b.com www.a.com //因为nginx的功能,当访问192.168.10.10这个ip时打开的是原始nginx网页,当访问www.b.com域名时打开的是b的网页
补充:
文字编码
ascII码: 可以将0 1 的组合替换成英文和符号。
国标2312:可以支持简体中文和基本的英文 0 1
BIG5:支持繁体 0 1
苹果及许多大公司,联合推出了一个编码,叫万国编码 utf-8
虚拟主机基于ip:
创建基于ip的网站
同一台服务器有多块网卡的话,可以用不同的ip,提供多个网站服务,之前的网页都是192.168.10.10提供的,可以变成192.168.10.11提供服务
server{
listen 192.168.10.11:80; //指定ip以及端口号,一定要以分号结尾,这里不指定ip时做的网页,服务器上如果两块卡的话它就都监听,也就是listen *:80
server_name localhost; //指定域名
location / {
root demon01; //网页根目录在哪
index index.html; //默认先打开demon1页面
}
虚拟主机基于端口:
server{
listen 192.168.10.11:8080; //指定ip以及端口号,一定要以分号结尾
server_name www.c.com; //指定域名,可以不指定域名,也可以指定域名通过端口、ip、域名的各种组合呈现出多个网页
location / {
root demon01; //网页根目录在哪
index index.html; //默认先打开demon1页面
}
****************************************************************************************************************
配置SSL虚拟主机
虚拟主机的加密网站,之前的实验叫用户认证,不存在公私钥解密的问题
TCP/IP协议 传输的时候都是明文传输
所以要利用http+SSL = https
加密算法:对称加密 非对称加密
对称加密:加密的时候是123 解密是123 工作机制导致网络加密不安全加密解密都是一把钥匙,只用在单机加密
非对称加密:加密的时候是123 解密是as2d 加密和解密不是一把钥匙 私钥解密 公钥匙加密
王 --------------------------------------------------- taobao(公钥 私钥) 私钥只在taobao手里不在网上传输
用户密码 用户密码
当王访问taobao就会下载公钥,而解密用的私钥在淘宝网自己手里,没有进行网络的传输
信息摘要:信息完整性校验
MD5算法不安全 / sha256 虽然是加密算法,但是现在用来校验
可以利用命令直接做加密
md5sum anaconda-ks.cfg 给一个文件做MD5的加密算法 MD5算法跟文件名,时间,权限都无关,只跟文件内容有关,所以用来校验完整性,sha256与它功能一样
将这些生成的MD5码保存下来,和以后再做对比,就能很快发现,哪个文件被攻击了
ssl 前提先下载对应的http+SSL = https是模块功能之一 --with-http_ssl_module
生成私钥和证书(就是公钥)
1.密钥一定要放在Nginx软件配置文件的目录下
cd /usr/local/nginx/conf/ 这是软件配置文件目录
openssl generation > cert.key 生成私钥
openssl request -new -x509 -key cert.key > cert.pem 制作证书(公钥)
(固定格式) (用哪个私钥解密) 生成的就是公钥
回答的第一个问题是CN其他都无所谓
2.修改Nginx配置文件
HTTS server下面的sever{}去掉注释,并将域名改成一个虚拟主机名
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; #加密超时时间是 5分钟
ssl_ciphers HIGH:!aNULL:!MD5; #加密算法不能用哪种!MD5
ssl_prefer_server_ciphers on;
location / { #是指根网页目录
root html;
index index.html index.htm;
}
}
然后重启Nginx
#请先确保nginx是启动状态,否则运行该命令会报错,报错信息如下:
#[error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)
然后客户端验证
前提是在/etc/hosts加解析
客户端访问:https://www.c.com 要添加例外,客户端获取证书
这个公私钥是自己生成的,浏览器不信任,服务端可以找授权中心买公私钥 ssl证书,买回来之后可以调用买的这两个文件就行了。