admin管理员组文章数量:1794759
学Python运维,这知识点你肯定会遇到,【必收藏之】nginx 域名跳转相关配置
📢📢📢📢📢📢 哈喽!大家好,我是 【梦想橡皮擦】,10 年产研经验,致力于 Python 相关技术栈传播 💗 🌻 本文如果觉得不错,动动小手点个赞赞吧 👍 🌻 本文如果发现错误,欢迎在评论区中指正哦 💗 👍 技术博客日更者,我喜欢写文章,如果任意一篇文章对你有帮助,就挺好的~ 👍 📣📣📣📣📣📣
欢迎大家订阅专栏 ⭐️ ⭐️ 《Python 爬虫 120》⭐️ ⭐️
📆 最近更新:2022 年 3 月 31 日,橡皮擦的第 605 篇原创博客
文章目录- ⛳️ 实战场景
- ⛳️ 需求一:访问不同地址,实现不同的跳转
- ⛳️ 需求二:跨域访问与预检请求(preflight request)
作为一个 Python 运维工程师,你将经常面临 nginx 相关的配置,其中最常见的是域名跳转,跨域配置。在之前橡皮擦已经写过了一篇博客,入门相关的你可以直接去学习。
《2022 年从零开始,用一篇博客掌握 nginx 的初级配置》
本篇博客将从域名跳转,跨域配置开始,逐步为你展开 nginx 实战配置。
⛳️ 需求一:访问不同地址,实现不同的跳转具体需求如下:
准备工作:
部署完毕,默认的配置文件如下所示(配置由宝塔生成,使用其它类似,域名是你配置的域名地址)
server { listen 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-START PHP引用配置,可以注释或修改 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)$ { expires 30d; error_log /dev/null; access_log /dev/null; } location ~ .*\\.(js|css)?$ { expires 12h; error_log /dev/null; access_log /dev/null; } access_log /www/wwwlogs/你的域名.log; error_log /www/wwwlogs/你的域名.error.log; }配置文件的相关说明,可以翻阅之前的博客学习,这里仅对我们的目标进行配置。
首先实现第一个需求,访问域名,跳转到另一个域名去。
location / { rewrite ^/ www.baidu/ permanent; }location 之后,跟着 / 表示匹配根路径,此时当你访问 /sohu 依旧会被跳转到百度页面,没有满足我们的需求。
在继续修改配置前,可以先看一下 rewrite 的相关语法:
rewrite 是实现 URL 重写的关键指令,根据 regex(正则表达式)部分的内容,重定向到 replacement 部分,结尾是 flag 标记。
rewrite regex replacement [flag]- 默认值: none
- 可编写位置:server、location、if
在看一下上述案例,格式如下:
rewrite ^/(.*) www.baidu/$1 permanent;翻译成中文如下所示:
关键字 正则 替代内容 flag标记- 关键字:重定向的关键字是 rewrite ;
- 正则:正则表达式语句进行规则匹配;
- 替代内容:将正则匹配的内容替换成 replacement;
- flag 标记:rewrite 支持的 flag 标记。
flag 标记说明:
- last:重写规则匹配完成,继续向下匹配 location URI 规则;
- break :重写规则匹配完成,不再匹配后面的任何规则;
- redirect :返回 302 临时重定向,浏览器地址栏显示 URL 地址;
- permanent :返回 301 永久重定向,浏览器地址栏显示 URL 地址;
综上所示,在看一下 rewrite 规则:
rewrite 为关键字,表示开启 rewrite 匹配规则,regex 正则部分是 ^/(.*) ,表示匹配所有内容,匹配成功后跳转到www.baidu/$1。$1 是取前面 regex 部分第一个括号内容,结尾的 permanent 是永久 301 重定向标记,即跳转到后面的 www.baidu/$1 地址。
不过建议 flag 位置不使用 permanent ,否则修改 nginx 配置之后,还需要清理缓存,否则会持续跳转。
了解这些内容之后就可以直接编写如下配置
location /sohu { rewrite ^/ www.sohu/; } location / { rewrite ^/ www.baidu/; }其中注意 location / 写在最下面。
也可以在一个 location 中增加判断,当匹配到请求的地址中出现 /app 的时候,就直接跳转到百度首页。
location / { if ($uri ~* '/app') { rewrite ^/ www.baidu/; } }还可以在 location / 之后添加匹配,例如下述规则,只有当访问根目录的时候,才会进行跳转。
location ~ /$ { rewrite ^/ www.baidu/; }再次补充一些正则相关的知识点如下所示:
- ~:区分大小写匹配;
- ~*:不区分大小写匹配;
- ^:匹配开头;
- $:匹配结尾;
- -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对于跨域请求,你还可以通过反向代理进行实现。
📣📣📣📣📣📣 🌻 本文如果发现错误,欢迎在评论区中指正哦 💗
欢迎大家订阅专栏 ⭐️ ⭐️ 《Python 爬虫 120》⭐️ ⭐️
版权声明:本文标题:学Python运维,这知识点你肯定会遇到,【必收藏之】nginx 域名跳转相关配置 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686589697a85070.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论