湖南移动网站建设,公司免费网站搭建,深圳公司排名名字,wordpress网站上传服务器文章目录 一、平滑升级二、修饰符2.1 无修饰符效果2.2 精准匹配#xff08;#xff09;2.3 区分大小写匹配#xff08;~#xff09;2.4 不区分大小写匹配#xff08;~*#xff09;2.5 匹配优先级 三、访问控制四、用户认证五、配置https六、开启状态界面七、rewrite重写u… 文章目录 一、平滑升级二、修饰符2.1 无修饰符效果2.2 精准匹配2.3 区分大小写匹配~2.4 不区分大小写匹配~*2.5 匹配优先级 三、访问控制四、用户认证五、配置https六、开启状态界面七、rewrite重写url7.1 uri——uri7.2 uri——其他网址7.3 uri——uri——uri 八、if判断8.1 浏览器分离8.2 防盗链 九、反向代理与负载均衡9.1 基本了解9.2 示例 一、平滑升级 平滑升级就是在不影响业务运行的情况下可以对nginx新增模块功能。虽然有这样一个功能但在实际生产中最好是一次性把所有需要的模块编译进去。这里演示如何新增一个echo模块。 1.紧接上文查看nginx当前已编译的模块。 2.下载新模块echo模块下载地址。 3.解压nginx安装包注意这里的安装包版本就是当前已安装的nginx版本的二进制包。
tar zxf nginx-1.24.0.tar.gz
cd nginx-1.24.04.开始编译新模块。
./configure \
--prefix/usr/local/nginx \
--usernginx \
--groupnginx \
--with-debug \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_image_filter_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_stub_status_module \
--http-log-path/var/log/nginx/access.log \
--error-log-path/var/log/nginx/error.log \
--add-module/root/echo-nginx-module-master //也就是在第一次编译的所有参数后买你添加此行指定新增模块的解压目录。//使用make编译编译后绝不能再执行make install。
make5.备份原程序。
cp /usr/local/nginx/sbin/nginx{,-bck}6.停止服务使用新程序文件启动Nginx最后查看已经编译的模块。
//停止服务。
nginx -s stop//拷贝新程序替换原程序
cp /root/nginx-1.24.0/objs/nginx /usr/local/nginx/sbin///启动服务。
nginx7.测试echo模块效果。修改配置文件后重启服务访问url
二、修饰符
修饰符功能精确匹配~正则表达式模式匹配区分大小写~*正则表达式模式匹配不区分大小写^~前缀匹配类似于无修饰符的行为也是以指定模块开始不同的是如果模式匹配那么就停止搜索其他模式了不支持正则表达式定义命名location区段这些区段客户端不能访问只可以由内部产生的请求来访问如try_files或error_page等
2.1 无修饰符效果
1.修改配置文件重启服务。
http {server {listen 80;server_name www.qingjun.com;location /qingjun { //此时location没有添加修饰符就光一个/qingjunecho hehe;}}
} 2.此时能匹配qingjun并输出内容如下几种情况。
2.2 精准匹配 表示必须与指定的模式精确匹配。 1.修改配置文件重启服务。
http {server {listen 80;server_name www.qingjun.com;location /qingjun { //在/qingjun前面添加修饰符 echo hehe;}}
}2.此时能匹配qingjun并输出内容如以下几种情况。 3.以下几种情况不能匹配。 2.3 区分大小写匹配~ ~表示指定的正则表达式要区分大小写。 1.修改配置文件重启服务。
http {server {listen 80;server_name www.qingjun.com;location ~ /qingjun {echo hehe;}}
}2.查看效果。 2.4 不区分大小写匹配~* ~*表示指定的正则表达式不区分大小写 1.修改配置文件重启服务。
http {server {listen 80;server_name www.qingjun.com;location ~* /qingjun {echo hehe;}}
}2.查看效果。 2.5 匹配优先级
优先级次序如下
( location 路径 ) -- ( location ^~ 路径 ) -- ( location ~ 正则 ) -- ( location ~* 正则 ) -- ( location 路径 )1.当有修饰符时优先显示修饰符下面的location内容。 2.正则表达式按照配置文件中定义的顺序匹配。 三、访问控制 访问控制就是设置黑名单、白名单允许哪些主机可以访问哪些主机不能访问。 参数释义备注allow设定允许哪台或哪些主机访问多个参数间用空格隔开。可用于全局段、http段、server段、location段deny设定禁止哪台或哪些主机访问多个参数间用空格隔开。可用于全局段、http段、server段、location段
1.示例。
allow 192.168.1.1/32 172.16.0.0/16;
deny all;2.设置IP白名单。
http {server {listen 80;server_name www.qingjun.com;location ~ /qingjun {echo dsadjkalsdjlkaas;allow 192.168.161.132/32; //只允许这台主机访问deny all; //拒绝所有主机}}
}3.设置IP黑名单。
http {deny 192.168.161.132/32;allow all;server {listen 80;server_name www.qingjun.com;location ~ /qingjun {echo dsadjkalsdjlkaas;}}
}四、用户认证 让客户端访问时需要通过输入正确的账号密码后才能访问到网页。 参数释义备注auth_basic “欢迎信息”;添加描述信息。可用于全局段、http段、server段、location段auth_basic_user_file “/path/to/user_auth_file”指定加密文件路径。可用于全局段、http段、server段、location段
1.生成加密文件里面包含账户和密码。
yum -y install httpd-tools//-m指定文件存放路径一般就是如下这个地址admin为自定义账户。
htpasswd -c -m /usr/local/nginx/.password admin2.修改nginx配置文件指定加密文件。
http {auth_basic 111;auth_basic_user_file /usr/local/nginx/.password;server {listen 80;server_name www.qingjun.com;location ~ /qingjun {echo dsadjkalsdjlkaas;}}
}3.访问网页查看效果。
五、配置https
1.自签CA证书。
//生成密钥。
mkdir /etc/pki/CA
cd /etc/pki/CA/
mkdir private
(umask 077;openssl genrsa -out private/cakey.pem 2048)
//提取公钥。
openssl rsa -in private/cakey.pem -pubout//CA自签证书。
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365//#读出cacert.pem证书内容
openssl x509 -text -in cacert.pem
mkdir certs newcerts crl
touch index.txt echo 01 serial//客户端生成密钥。
cd /usr/local/nginx/
mkdir ssl
cd ssl/
(umask 077;openssl genrsa -out nginx.key 2048)//客户端生成证书签署请求
openssl req -new -key nginx.key -days 365 -out nginx.csr//客户端把证书签署请求文件发送给CA这里不需要做这步骤因为我们已经在当前目录了
scp httpd.csr rootCA端IP:/root//CA签署客户端提交上来的证书。
openssl ca -in ./nginx.csr -out nginx.crt -days 365//删除过度文件。
rm -rf nginx.csr2.修改nginx配置文件。
http {server {listen 443 ssl; //修改端口号server_name www.qingjun.com; //域名要与证书里保持一致。ssl_certificate ../ssl/nginx.crt; //指定公钥ssl_certificate_key ../ssl/nginx.key; //指定私钥ssl_session_cache shared:SSL:1m; //取消注释ssl_session_timeout 5m; //取消注释ssl_ciphers HIGH:!aNULL:!MD5; //取消注释ssl_prefer_server_ciphers on; //取消注释location ~ /qingjun {echo dsadjkalsdjlkaas;}}
}3.重启服务访问网页。 六、开启状态界面 可以通过状态网页获取基本的流量信息。该参数由 --with-http_stub_status_module 模块提供安装Nginx时需要加入该模块。 状态码表示的意义Active connections 2当前所有处于打开状态的连接数accepts总共处理了多少个连接handled成功创建多少握手requests总共处理了多少个请求Readingnginx读取到客户端的Header信息数表示正处于接收请求状态的连接数Writingnginx返回给客户端的Header信息数表示请求已经接收完成且正处于处理请求或发送响应的过程中的连接数Waiting开启keep-alive的情况下这个值等于active - (reading writing)意思就是Nginx已处理完正在等候下一次请求指令的驻留连接
1.修改配置文件。可以配合白名单来玩。
location /status {stub_status {on | off};allow 172.16.0.0/16;deny all;
}2.重启服务http://ip/status访问状态网页。
活动的连接数1
服务接受的连接数4
处理的个数4
请求的个数1
处于读的个数0
处于写的个数1
处于等待的个数13.可以使用zabbix监控这个网页中的连接数。
[rootmaster conf]# curl -k https://192.168.161.129/status
Active connections: 1
server accepts handled requests6 6 2
Reading: 0 Writing: 1 Waiting: 0 //取第一行的数值即可。
curl -k https://192.168.161.129/status |awk NR1{print $3}
1七、rewrite重写url 把原来要访问的uri交给另外一个uri去寻找是用来执行URL重定向。这个机制有利于去掉恶意访问的url也有利于搜索引擎优化SEO语法rewrite regex replacement flag;捕获子表达式可以捕获放在()之间的任何文本比如^(hello|sir)$ 符串为“hi sir”捕获的结果$1hi$2sir 示例释义rewrite ^/images/(.*.jpg)$ /imgs/$1 break表示访问images的uri时交给imgs这个uri去寻找。rewrite ^/img/(.*)$ http://www.idfsoft.com/index.html redirect表示访问img这个uri时交给http://www.idfsoft.com/index.html这个url寻找。
flag作用last基本上都用这个flag表示当前的匹配结束继续下一个匹配最多匹配10个到20个一旦此rewrite规则重写完成后就不再被后面其它的rewrite规则进行处理而是由UserAgent重新对重写后的URL再一次发起请求并从头开始执行类似的过程break中止Rewrite不再继续匹配一旦此rewrite规则重写完成后由UserAgent对新的URL重新发起请求且不再会被当前location内的任何rewrite规则所检查redirect以临时重定向的HTTP状态302返回新的URLpermanent以永久重定向的HTTP状态301返回新的URL
标识符意义^必须以^后的实体开头$必须以$前的实体结尾.匹配任意字符[]匹配指定字符集内的任意字符[^]匹配任何不包括在指定字符集内的任意字符串l匹配 l之前或之后的实体()分组组成一组用于匹配的实体通常会有 l来协助
7.1 uri——uri
1.正常访问图片效果。创建图片目录上传一张图片web访问。
mkdir /usr/local/nginx/html/img
[rootmaster img]# ll
-rw-r--r-- 1 root root 1476047 Jul 18 23:20 1.jpg//修改配置文件。
vim /usr/local/nginx/conf/nginx.conf
http {server {listen 80;server_name www.qingjun.com;location ~ /img {root /usr/local/nginx/html;}}
}2.修改图片目录名此时使用img路径就访问不到这个图片。
mv /usr/local/nginx/html/img /usr/local/nginx/html/qingjun3.添加rewrite重写url规则再次访问。
http {server {listen 80;server_name www.qingjun.com;location ~ /img {root /usr/local/nginx/html;rewrite ^/img/(.*\.jpg)$ /qingjun/$1 break; //img交给qingjun去找$1等于括号里的内容。}location ~ /qingjun { //指定图片正确存在的路径。root /usr/local/nginx/html;}}
}4.若目标地址不在源地址的根下则需要定义源地址的根。
//将图片地址移到其他位置。
mv /usr/local/nginx/html/qingjun /opt///修改配置文件。
http {server {listen 80;server_name www.qingjun.com;location ~ /img {root /opt; //也要改成图片正确位置的上一级目录。rewrite ^/img/(.*\.jpg)$ /qingjun/$1 break;}location ~ /qingjun { //图片正确位置。root /opt;}}
}7.2 uri——其他网址
1.定义一个正常访问网站。
http {server {listen 80;server_name www.qingjun.com;location /qingjun {root /usr/local/nginx/html;index index.html index.htm;}}
}//定义网页文件
mkdir /usr/local/nginx/html/qingjun
echo hehe /usr/local/nginx/html/qingjun/index.html2.使用rewrite重定向使其访问http:ip/qingjun会跳转到其他网址。
http {server {listen 80;server_name www.qingjun.com;location /qingjun {root /usr/local/nginx/html;index index.html index.htm;rewrite ^/qingjun/(.*)$ https://blog.csdn.net/yi_qingjun?spm1011.2415.3001.5343;}}
}3.调用其他网站的图片让客户访问。访问img转到其他网址。
http {server {listen 80;server_name www.qingjun.com;location /img {root /usr/local/nginx/html;index index.html index.htm;rewrite ^/img/(.*)$ https://cn.bing.com/images/search?viewdetailV2ccidCxDCuKuuidFBA838ACF064A76AC0058220B2B6BCB1CBBD5DE6thidOIP.CxDCuKuuVVfXZ_eDRcfDuQHaEKmediaurlhttps%3a%2f%2fts1.cn.mm.bing.net%2fth%2fid%2fR-C.0b10c2b8abae5557d767f78345c7c3b9%3frik%3d5l29y7G8trIggg%26riu%3dhttp%253a%252f%252fi3.img.969g.com%252fdown%252fimgx2014%252f02%252f08%252f289_093214_13ee6.jpg%26ehk%3dDz0E1RuS%252fO0MM4sqy3TBm9fhMKtoEti9THnsNH%252buZY0%253d%26risl%3d%26pid%3dImgRaw%26r%3d0exph1080expw1920q%e7%b2%be%e7%be%8e%e5%a3%81%e7%ba%b8simid608041651648332714FORMIRPRSTck912A8F3A94487DA462B2C2764AC15A4AselectedIndex0ajaxhist0ajaxserp0;}}
}7.3 uri——uri——uri
1.修改图片地址。 2.修改配置文件。
http {server {listen 80;server_name www.qingjun.com;location /img {root /opt;rewrite ^/img/(.*\.jpg)$ /image/$1 last;}location /image {root /opt;rewrite ^/image/(.*\.jpg)$ /images/$1 last;}}
}3.重启服务访问网页。
八、if判断
语法应用场景if (condition) {…}server段、location段
condition类型释义变量变量值为空串或者以“0”开始则为false其它的均为true以变量为操作数构成的比较表达式可使用!类似的比较操作符进行测试正则表达式的模式匹配操作~区分大小写的模式匹配检查。~不区分大小写的模式匹配检查。 !~和!~对上面两种测试取反测试指定路径为文件的可能性-f!-f测试指定路径为目录的可能性-d!-d测试文件的存在性-e!-e检查文件是否有执行权限-x!-x
8.1 浏览器分离
http {server {listen 80;server_name www.qingjun.com;if ($http_user_agent ~ firefox) {rewrite ^(.*)$ /firefox/$1 break;}if ($http_user_agent ~ MSIE) {rewrite ^(.*)$ /msie/$1 break;}if ($http_user_agent ~ Chrome) {rewrite ^(.*)$ /chrome/$1 break;}location / {root html;index index.html;}}
}8.2 防盗链
location ~* \.(jpg|gif|jpeg|png)$ {valid_referers none blocked www.idfsoft.com;if ($invalid_referer) {rewrite ^/ http://www.idfsoft.com/403.html;}
}九、反向代理与负载均衡 nginx实现动静分离。在反向代理的时候若是静态资源就直接从nginx发布的路径去读取而不需要从后台服务器获取了。但是这种情况下需要保证后端和前端程序一致可以使用Rsync做服务端自动同步或者使用NFS、MFS分布式共享存储。常用模块是proxy_pass和proxy_cache。模块使用都时需要编译进nginx的。 9.1 基本了解 nginx通过upstream模块来实现简单的负载均衡upstream需要定义在http段内。在upstream段内定义一个服务器列表默认方式是轮询。 1.第一步。若要确定同一个访问者发出的请求总是由同一个后端服务器来处理可以设置ip_hash如下配置
//注意这个方法本质还是轮询而且由于客户端的ip可能是不断变化的比如动态ip代理翻墙等因此ip_hash并不能完全保证同一个客户端总是由同一个服务器来处理。
upstream www.qingjun.com {ip_hash;server 127.0.0.1:9080 weight5;server 127.0.0.1:8080 weight5;server 127.0.0.1:1111;
}2.第二步。定义好upstream后需要在server段内添加如下内容
server {location / {proxy_pass http://www.qingjun.com;}
}9.2 示例
主机IP安装的服务lb192.168.161.129nginxRS1192.168.161.131httpdRS2192.168.161.132httpd
1.在RS1和RS2上安装服务。
//RS1
yum -y install httpd
echo RS1 /var/www/html/index.html
systemctl start httpd//RS2
yum -y install httpd
echo RS2 /var/www/html/index.html
systemctl start httpd2.配置nginx负载均衡。
http {upstream www.runtime.com { //这个名称需要与下面的location名称一致。server 192.168.161.131; //负载哪个后端服务。server 192.168.161.132;}server {listen 80;server_name www.qingjun.com;location / {proxy_pass http://www.runtime.com; //固定写法只需要修改名称即可。}}
}3.设置权重访问。
http {upstream www.runtime.com {server 192.168.161.131 weight3; //添加weight3意味着访问3次不设置则默认访问1次。server 192.168.161.132;}server {listen 80;server_name www.qingjun.com;location / {proxy_pass http://www.runtime.com;}}
}4.设置始终要同一个后端服务器处理请求。访问显示是随机的之后一致是该服务器处理请求。(存在瑕疵慎用)
http {upstream www.runtime.com {ip_hash;server 192.168.161.131;server 192.168.161.132;}server {listen 80;server_name www.qingjun.com;location / {proxy_pass http://www.runtime.com;}}
}