曾无好事来相访,赖尔高文一起予。这篇文章主要讲述学Python运维,这知识点你肯定会遇到,必收藏之nginx 域名跳转相关配置相关的知识,希望能为你提供帮助。
?? 实战场景【学Python运维,这知识点你肯定会遇到,必收藏之nginx 域名跳转相关配置】作为一个 python 运维工程师,你将经常面临 nginx 相关的配置,其中最常见的是域名跳转,跨域配置。在之前橡皮擦已经写过了一篇博客,入门相关的你可以直接去学习。
本篇博客将从域名跳转,跨域配置开始,逐步为你展开 nginx 实战配置。
?? 需求一:访问不同地址,实现不同的跳转具体需求如下:
- 访问 www.aaaa.com 跳转到 www.baidu.com
- 访问 www.aaaa.com/sohu 跳转到 www.sohu.com
- 访问 www.aaaa.com/sina 跳转到 www.sina.com
- 有一台可操作的服务器;
- 配置一个静态站点;
- 部署一些静态网页。
serverlisten 80;
server_name 你的域名;
index index.php index.html index.htm default.php default.htm default.html;
root /www/wwwroot/你的域名;
#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
#error_page 404/404.html;
#SSL-END#ERROR-PAGE-START错误页配置,可以注释、删除或修改
#error_page 404 /404.html;
#error_page 502 /502.html;
#ERROR-PAGE-END#PHP-INFO-STARTPHP引用配置,可以注释或修改
include enable-php-73.conf;
#PHP-INFO-END#REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
include /www/server/panel/vhost/rewrite/你的域名.conf;
#REWRITE-END#禁止访问的文件或目录
location ~ ^/(\\.user.ini|\\.htaccess|\\.git|\\.svn|\\.project|LICENSE|README.md)return 404;
#一键申请SSL证书验证目录相关设置
location ~ \\.well-known
allow all;
location ~ .*\\.(gif|jpg|jpeg|png|bmp|swf)$expires30d;
error_log /dev/null;
access_log /dev/null;
location ~ .*\\.(js|css)?$expires12h;
error_log /dev/null;
access_log /dev/null;
access_log/www/wwwlogs/你的域名.log;
error_log/www/wwwlogs/你的域名.error.log;
配置文件的相关说明,可以翻阅之前的博客学习,这里仅对我们的目标进行配置。
首先实现第一个需求,访问域名,跳转到另一个域名去。
location /rewrite ^/ http://www.baidu.com/ permanent;
location
之后,跟着 /
表示匹配根路径,此时当你访问 /sohu
依旧会被跳转到百度页面,没有满足我们的需求。在继续修改配置前,可以先看一下
rewrite
的相关语法:rewrite regex replacement [flag]
- 默认值: none
- 可编写位置:server、location、if
rewrite ^/(.*) http://www.baidu.com/$1 permanent;
翻译成中文如下所示:
关键字 正则 替代内容 flag标记
- 关键字:重定向的关键字是 rewrite ;
- 正则:正则表达式语句进行规则匹配;
- 替代内容:将正则匹配的内容替换成 replacement;
- flag 标记:rewrite 支持的 flag 标记。
last
:重写规则匹配完成,继续向下匹配 location URI 规则;break
:重写规则匹配完成,不再匹配后面的任何规则;redirect
:返回 302 临时重定向,浏览器地址栏显示 URL 地址;permanent
:返回 301 永久重定向,浏览器地址栏显示 URL 地址;
rewrite
规则:不过建议 flag 位置不使用
permanent
,否则修改 nginx 配置之后,还需要清理缓存,否则会持续跳转。了解这些内容之后就可以直接编写如下配置
location /sohurewrite ^/ http://www.sohu.com/;
location /rewrite ^/ http://www.baidu.com/;
其中注意
location /
写在最下面。也可以在一个 location 中增加判断,当匹配到请求的地址中出现
/app
的时候,就直接跳转到百度首页。location /if ($uri ~* /app)rewrite ^/ http://www.baidu.com/;
还可以在
location /
之后添加匹配,例如下述规则,只有当访问根目录的时候,才会进行跳转。location ~ /$rewrite ^/ http://www.baidu.com/;
再次补充一些正则相关的知识点如下所示:
~
:区分大小写匹配;~*
:不区分大小写匹配;^
:匹配开头;$
:匹配结尾;-f
和!-f
:判断是否存在文件;-d
和!-d
:判断是否存在目录;-e
和!-e
:判断是否存在文件或目录;-x
和!-x
:判断文件是否可执行。
?? 需求二:跨域访问与预检请求(preflight request)跨域配置也是最常见的配置了,基本在通过自定义响应头进行配置,关键字为
addheader
,具体如下所示:add_header Access-Control-Allow-Origin *;
add_header code 0102566341;
文章图片
Access-Control-Allow-Origin
:允许的请求源;Access-Control-Allow-Methods
:允许的请求方法;Access-Control-Allow-Headers
:请求头字段;Access-Control-Allow-Credentials
:允许带上 cookie 请求。
Access-Control-Allow-Origin
的时候,尽量不使用 *
,而使用具体的域名。预检请求(preflight request)
跨域资源共享(CORS)标准,新增了一组 HTTP 头部字段,允许服务器声明哪些源站有权限访问哪些资源。
如果 HTTP 的请求方法会对服务器数据产生副作用,浏览器必须先用 OPTIONS 方法发起一个预检请求(preflight request),从而获知服务端是否允许该跨域请求。
当服务器返回确认状态时,才发起实际的 HTTP 请求。
一般当 Content-Type 不属于下述 MIME 类型时,都需要进行预检。
application/x-www-form-urlencoded
multipart/form-data
text/plain
对于跨域请求,你还可以通过反向代理进行实现。
推荐阅读
- Linux磁盘和文件系统管理(磁盘配额的详细做法)
- Docker exec 的实现原理(35)
- LNMP平台拆分 #yyds干货盘点#
- 图解数据结构排序全面总结(上)
- LNMP平台搭建与应用 #yyds干货盘点#
- Security安全认证 | Spring Boot如何集成Security实现安全认证
- Centos系统部署nginx1.18.0
- Nginx最常用的七种模块配置 #yyds干货盘点#
- 高频面试java高级进阶之锁?与CAS详解#yyds干货盘点#