week15-Nginx企业应用

作者:jcmp      发布时间:2021-05-04      浏览量:0
一、Nginx网站服务应用1. Ngin

一、Nginx网站服务应用

1. Nginx服务监控状态页部署

官方说明

在遇到模块不知道如何配置得时候都可以进进入 nginx官网 去查找相关帮助文档,里边有详细介绍,示例。

参数含义:Active connections: 2 激活的已连接数(总的并发连接数,有多少人在访问)server accepts 已接受的客户端访问服务端总的链接数量 handled '已经处理的'客户端访问服务端的总量requests 接收到的用户请求的报文的总数量reading 读取目前用户访问请求头数量writting 目前响应用户访问响应头数量waitting 目前在内存中/队列中未处理的请求报文数量。

2. Nginx服务日志信息

日志格式定义:(nginx.conf配置文件中定义) log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';以上信息都表示定义日志格式 main 主题$remote_addr$xxx这些带$符号的字符串,都是Nginx的内置变量Nginx 官网内置变量介绍http://nginx.org/en/docs/varindex.html。

访问日志详解

3. 网站location

location = / { return 301; } location / { return 302; } location /documents/ { return 401; } location ^~ /images/ { return 402; } location ~* \.(gif|jpg|jpeg)$ { return 501; } =: 精确匹配 = /oldboy www.oldboy.com/oldboy 最优先 ^~: 优先匹配 ^~ /images www.oldboy.com/images/oldboy.jpg 优先 ~: 模糊匹配 ~ /oldboy www.oldboy.com/oldboy/oldboy.html 区分大小写 ~*: 模糊匹配 ~* /oldboy www.oldboy.com/oldboy/oldboy.html 不区分大小写 ~* \.(gif|jpg|jpeg)$ www.oldboy.com/images/oldboy.jpg ~* 与 ~的区别在于前者不区分大小写 后者区分 /目录 路径匹配 /oldboy www.oldboy.com/oldboy/oldboy.html 区分大小写 / 默认匹配 / www.oldboy.com/oldgirl。

4. 网站页面跳转功能 rewrite

如何实现跳转

Syntax: rewrite regex replacement [flag]; 匹配需要跳转的信息 跳转成什么地址 标记(四种标记)跳转的标记信息:last:break:redirect:临时跳转 302permanent:永久跳转 301。

301跳转: 客户端(浏览器) 第一次访问 ----> 京东网站服务器(.100) www.360buy.com 1. HTTP请求:host-www.360buy.com 10.0.0.100 <---- 2. HTTP响应:跳转告知 www.jx.com 301 告知浏览器记录跳转 ----> 3. HTTP请求:host-www.jd.com <---- 4. HTTP响应:页面信息进行响应 200 ---> 京东网站服务器(.100) www.360buy.com 1. HTTP请求:host-www.360buy.com (根据浏览器记录,直接跳转,不需要服务器告知跳转) HTTP请求:host-www.jd.com <--- 2. HTTP响应:页面信息进行响应 200 302跳转 客户端(浏览器) ----> 京东网站服务器(.100) www.360buy.com 1. HTTP请求:host-www.360buy.com 10.0.0.100 <---- 2. HTTP响应:跳转告知 www.jd.com 302 ----> 3. HTTP请求:host-www.jd.com <---- 4. HTTP响应:页面信息进行响应 200 ---> 京东网站服务器(.100) www.360buy.com 1. HTTP请求:host-www.360buy.com <---- 2. HTTP响应:跳转告知 www.jd.com 302 ----> 3. HTTP请求:host-www.jd.com (需要服务器再次告知跳转) <---- 4. HTTP响应:页面信息进行响应 200 如何选择永久跳转与临时跳转(需要分析) 永久跳转: 如果有一个长的地址信息或者名称,需要跳转到其他地址,一旦跳转完尽量不要改变,使用301 例如 mirror.aliyun.com 就是永久跳转 临时跳转: 活动页面,短时间内需要跳转,不需要记录信息时候,使用302,如果使用了301 活动结束之后就会报错。

server { listen 80; server_name rewrite.oldboy.com; root /html; index index.html; location ~ ^/break/ { rewrite ^/break/ /test/ break; } location ~ ^/last/ { rewrite ^/last/ /test/ last; } location /test/ { default_type application/json; # return 200 'ok'; root /html/www; index oldboy.jpg index.html; }} break:一旦跳转完毕,默认停止后续操作(没有相应信息) 不会再地址栏显示跳转页面地址 last: 一旦跳转完毕,会继续访问页面配置信息。

例1. 用户访问html/abc/index.html实际上真实访问是html/bbb/ccc/index.html。

# html 目录下操作mkdir -p bbb/ccc/ # bbb/ccc/目录下操作echo 'rewrite.successful' > index.html。

server { server_name rewrtie.oldboy.com; listen 80; location / { root /html; index index.html; } location /abc { rewrite (.*) /bbb/ccc/index.html redirect; } }location 在匹配到访问 /abc/ 目录的时候,跳转访问 bbb/ccc/index.html。

> 第二种方法 return 跳转 server { listen 80; location / { root /html; index index.html; } location /abc { return 302 /ccc/bbb/2.html; } }return 会显示跳转后的地址,而rewrite不会。

例2. 用户访问/2014/ccc/bbb/2.html实际上真实访问是/2018/ccc/bbb/2.html。

mkdir /html/2018/ccc/bbb -p echo "2018_ccc_bbb_2" > /html/2018/ccc/bbb/2.html。

server { listen 80; location / { root /html; index index.html; } location /2014 { # 记得加 / rewrite ^/2014/(.*)$ /2018/$1 redirect; #return 302 /2018/ccc/bbb/2.html; 第二种跳转方法 } }

server { listen 80; location / { root /html; index index.html; } location /2014 { # 记得加 / return 302 /2018/ccc/bbb/2.html; 第二种跳转方法 } }

例3:用户访问/test目录下任何内容, 实际上真实访问是rewrite.oldboy.com。

server { server_name rewrite.oldboy.com; location / { root /html/; index oldboy.jpg index.html; # 特殊页面时 } location /test { rewrite (.*) http://rewrite.oldboy.com redirect; # 设置跳转 return 302 http://rewrite.oldboy.com; return方法 # 设置跳转 }}

例4:用户访问course-11-22-33.html实际上真实访问是/course/11/22/33/course_33.html # http://www.oldboy.com/course-11-22-33.html ==> http://www.oldboy.com/course/11/22/33/course_33.html 跳转目的,不要让用户得知企业站点目录结构。

例5:Nginx 实现url 的跳转

# 第一种写法: 可以生效,但是次数过多,会提示重定向次数过多,无法打开网站,避免此问题,使用第二种写法server {listen 80;server_name rewrite.oldboy.com www.jd.com;root /html;index index.html index.htm; rewrite ^/(.*) http://www.jd.com redirect ;}# 第二种写法:解决重定向次数过多的问题server { listen 80; server_name rewrite.oldboy.com; index index.html index.htm; rewrite ^/(,*) http://jd.com redirect;}server { server_name www.jd.com; location / { root /html/; index index.html; }}~ # 第三种写法,使用if 判断 location / { root /html; index index.html index.htm; if ($http_host ~* ^rewrite.oldboy.com) { # 判断不区分大小写 ,如果匹配了以 rewrite.oldboy.com 开头的信息,就按照下方语句跳转 rewrite ^/(.*) http://www.jd.com redirect; } }

例6:将http请求,跳转至https

第一步:开启 with-http_ssl_moudle 模块(yum安装自动开启,编译安装需要手动开启)第二步:配置文件中加载ssl配置信息server {listen 443 ssl;server_name www.oldboy.coml;ssl_certificate /etc/nginx/conf/server.crt; 公钥ssl_certificate_key /etc/nginx/conf/server.key; 私钥}第三步:创建私钥和证书先有私钥openssl genrsa -idea -out server.key 2048创建证书openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt req --- 设置证书 -days 36500 --- 设置证书时效 -x509 --- 设置证书文件信息格式,标准的证书格式 -sha256 --- 证书数据加密方式 -nodes -newkey --- 去掉密码信息 (上边创建私钥时候的密码) rsa:2048 --- 识别私钥加密信息 -keyout --- 读取私钥文件 -out --- 输出一个证书。

1. 查看是否开启了 with-http_ssl_moudle。

nginx -v

2. 编写配置文件

server { listen 443 ssl; server_name www.oldboy.com; ssl_certificate /etc/nginx/conf/server.crt; ssl_certificate_key /etc/nginx/conf/server.key;location / { root /html/www; index index.html index.htm;}}

3. 创建公钥 证书

创建私钥openssl genrsa -idea -out server.key 2048 先有私钥提示创建一个私钥密码创建证书:openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt## 注意,要与配置文件中指定的证书,私钥存放路径一直 /etc/nginx/conf/xxx。

4. 重启nginx,测试网站

systemctl restart nginx

server { listen 80; root /html/www; index index.html index.htm; server_name www.oldboy.com; # rewrite ^(.*) https://$server_name$1 redirect; rewrite 跳转方法 $1 后向引用前方匹配uri return 302 https://$server_name$request_uri; #return 跳转方法}server { listen 443 ssl; server_name www.oldboy.com; ssl_certificate /etc/nginx/conf/server.crt; ssl_certificate_key /etc/nginx/conf/server.key;location / { root /html/www; index index.html index.htm;

Rewrite常用内置变量,在匹配过程中可以引用一些Nginx的全局变量 $server_name 当前用户请求的域名 $request_filename 当前请求的文件路径名(带网站的主目录/html/images/test.jpg) $request_uri 当前请求的文件路径名(不带网站的主目录/images/test.jpg) $scheme 用的协议,比如http或者https。

5. Nginx 内容总结

nginx网站服务阶段总结:01. 软件部署安装过程02. 软件配置文件编写 http://nginx.org/en/docs/ 03. 软件企业应用配置 a. 实现多个页面配置 b. 实现不同访问方式 c. 实现目录索引功能 d. 实现网站安全访问 e. 实现状态信息监控 f. 服务程序日志功能 日志切割处理(logrotate 切割日志脚本) #!/bin/bash log_path="/var/log/nginx/" access_info="access_log" error_info="error_log" access_info_date="access_$(date +%F).log" error_info_date="error_$(date +%F).log" mv $log_path$access_info $log_path$access_info_date mv $log_path$error_info $log_path$error_info_date systemctl restart nginx 编写定时任务 g. 服务程序location匹配uri信息功能 h. 服务程序rewrite(return)实现网站页面跳转功能 04. 网站服务实现HTTPs访问。