安装nginx
nginx
访问控制
用于location段
allow :设定允许哪台或哪些主机访问,多个参数间用空格隔开
deny :设定禁止哪台或那些主机访问,多个参数用空格隔开
allow 192.168.1.1/32 172.16.0.0/16;
deny all; #可写ip或网段
修改配置文件
location / {
root /www;
index index.html index.htm index.php;
deny 192.168.118.100/24; #拒绝本机
}
基于用户认证
auth_basic "欢迎信息"
auth_basic_user_file "/path/to/user_anth_file"
###
user_anth_file内容格式为:
username:password
这里的密码为加密后的密码串,建议用htpasswd来创建此文件
htpasswd -c -m /path/to/.user_auth_file USERNAME
安装httpd-tools.x86_64 0:2.4.6-80.el7.centos.1
[root@nginx ~]# yum -y install httpd-tools
[root@nginx ~]# htpasswd -c -m /usr/local/nginx/dxk dxk #用户为dxk
New password:
Re-type new password:
Adding password for user dxk
[root@nginx ~]# cat /usr/local/nginx/dxk
dxk:$apr1$GFSNqOA0$DxMTeAfeV.fYX9GPflHKu. #用户名和加密后的密码
修改nginx的配置文件
[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf
location / {
root /www;
index index.html index.htm index.php;
#新增这两行
auth_basic "welcome"; #访问注释信息
auth_basic_user_file "/usr/local/nginx/dxk"; #登录的目录
}
重启nginx
[root@nginx ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
#语法没有问题
[root@nginx ~]# nginx -s reload
访问nginx,弹出登录页面
成功登录,可看到nginx默认页
https配置
OpenSSL实现私有CA
CA(Certificate Authority)是数字证书认证中心的简称,是指发放、管理、废除数据证书的机构。
CA的作用是检查证书持有者身份的合法性,并签发证书(在证书上签字),以防证书被伪造或篡改,以及对证书和密钥进行管理
CA的配置文件:/etc/pki/tls/openssl.cnf
a) CA生成一对密钥
cd /etc/pki/CA
(umask 077;openssl genrsa -out private/cakey.pem 2048) #生成密钥,括号必须要
openssl rsa -in private/cakey.pem -pubout #提取公钥
b) CA生成自签署证书
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365
#生成自签署证书
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
#下面内容自定义
Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:hb
Locality Name (eg, city) [Default City]:wh
Organization Name (eg, company) [Default Company Ltd]:www.dxk.com
Organizational Unit Name (eg, section) []:dxk
Common Name (eg, your name or your server's hostname) []:dxk
Email Address []:123.com
openssl x509 -text -in cacert.pem #读出cacert.pem证书的内容
mkdir certs newcerts crl
c) 客户端(例如nginx服务器)生成密钥
cd /usr/local/nginx && mkdir ssl && cd ssl
(umask 077;openssl genrsa -out nginx.key 2048)
d) 客户端生成证书签署请求
openssl req -new -key nginx.key -days 365 -out nginx.csr
e) 客户端把证书签署请求文件发送给CA
#在同一台机子上可省略
scp nginx.csr root@CA端IP:/root
f) CA签署客户端提交上来的证书
openssl ca -in /root/nginx.csr -out nginx.crt -days 365
g) CA把签署好的证书httpd.crt发给客户端
scp nginx.crt root@客户端IP:/usr/local/nginx/ssl/
修改配置文件
[root@nginx ssl]# vim /usr/local/nginx/conf/nginx.conf
# HTTPS server
#
#取消下面的注释
server {
listen 443 ssl;
###这三行配置文件
server_name localhost;
ssl_certificate cert.pem;
ssl_certificate_key cert.key;
修改为 (其他可不变)
server_name www.dxk.com;
ssl_certificate /usr/local/nginx/ssl/nginx.crt;
ssl_certificate_key /usr/local/nginx/ssl/nginx.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;
}
}
}
重启nginx
查看我生成的证书
开启状态页面
开启status
location /status {
stub_status {on | off};
allow 172.16.0.0/16;
deny all;
}
修改配置文件
#在server下增加下面内容
location /status {
stub_status on;
}
测试状态
状态码 | 表示的意义 |
---|---|
Active connections 2 | 当前所有处于打开状态的连接数 |
accepts | 总共处理的多少个连接 |
handled | 成功创建多少握手 |
requests | 总共处理了多少个请求 |
Reading | nginx读取到客户端的Header信息数,表示正处于接收请求状态的连接数 |
Writing | nginx返回给客户端的Header信息数,表示请求已经接收完成,且正处于处理请求或发送响应的过程的连接数 |
Waiting | 开启keep-alive的情况下,这个值等于active -(reading+writing),意思就是Nginx以处理完正在等候下一次请求指令的驻留连接 |
rewrite
语法:rewrite regex replacement flag;
,如:
rewrite ^/images/(.*\.jpg)$ /imgs/$1 break;
[root@nginx ~]# cd /usr/local/nginx/html/
[root@nginx html]# mkdir haha
#上传一张图片改名为haha.jpg
修改配置文件
server {
listen 80;
# server_name 192.168.118.128;
charset utf-8;
access_log logs/host.access.log main;
location / {
root /www;
index index.html index.htm index.php;
}
#增加如下内容
location /haha {
root html;
index index.html;
}
重启服务,访问网页
将haha目录改为lala
[root@nginx html]# vim /usr/local/nginx/conf/nginx.conf
[root@nginx html]# mv haha/ lala/
[root@nginx html]# ll
总用量 1260
-rw-r--r--. 1 root root 537 10月 18 08:42 50x.html
-rw-r--r--. 1 root root 612 10月 18 08:42 index.html
drwxr-xr-x. 2 root root 22 10月 24 16:20 lala
修改配置文件
location /haha {
root html;
index index.html;
rewrite ^/haha/(.*\.jpg)$ /lala/$1 break; #增加这一行
}
重启服务,重新请求
可看到虽然没有haha目录,但仍可访问到图片,URL重写成功
我们也可以让url做多次跳转,最多可以跳20次
二次跳转实例
实验思路
客户端发出的请求改变后的URL(haha)———>改变后的URL(lala )——>https://blog.csdn.net/qq_43094192
修改配置文件
location /haha {
root html;
index index.html;
rewrite ^/haha/(.*\.jpg)$ /lala/$1 last; #将break换成last
}
#增加如下内容,再次跳转到博客链接结束
location /lala {
rewrite ^/lala/(.*\.jpg)$ https://blog.csdn.net/qq_43094192 break;
}
重启nginx
直接跳转到博客链接
浏览器分离案例
if ($http_user_agent ~ Firefox) { \\火狐浏览器
rewrite ^(.*)$ /firefox/$1 break;
}
if ($http_user_agent ~ MSIE) { \\IE浏览器
rewrite ^(.*)$ /msie/$1 break;
}
if ($http_user_agent ~ Chrome) { \\谷歌浏览器
rewrite ^(.*)$ /chrome/$1 break;
}
防盗链接案例
location ~* \.(jpg|gif|jpeg|png)$ {
valid_referer none clocked www.baidu.com; \\锁定网址
if ($invalid_referer) {
rewrite ^/ http://www.baidu.com/403.html; \\未进入报错403
}
}