nginx 跳转系列
1、nginx强制跳转https配置,通过http状态吗实现,http状态吗地址:
https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/307
301 It is therefore recommended to use the 301
code only as a response for GET
or HEAD
methods and to use the 308
Permanent Redirect
for POST
methods instead, as the method change is explicitly prohibited with this status.
#cat conf.d/test.conf
server {
listen 80;
server_name cul.xget.com;
location / {
auth_basic "it's protected";
auth_basic_user_file /data/.htpasswd;
proxy_pass http://10.10.17.31:8500;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
proxy_set_header Access-Control-Allow-Origin *;
proxy_next_upstream http_502 http_504 error timeout invalid_header;
}
listen 443 ssl;
ssl_certificate /root/USSL_TBDmkIc7/Nginx/public.pem;
ssl_certificate_key /root/USSL_TBDmkIc7/Nginx/private.key;
ssl_session_cache shared:le_nginx_SSL:1m; # managed by Certbot
ssl_session_timeout 1440m; # managed by Certbot
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # managed by Certbot
ssl_prefer_server_ciphers on; # managed by Certbot
ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256 ECDHE-ECDSA-AES256-GCM-SHA384 ECDHE-ECDSA-AES128-SHA ECDHE-ECDSA-AES256-SHA ECDHE-ECDSA-AES128-SHA256 ECDHE-ECDSA-AES256-SHA384 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES256-GCM-SHA384 ECDHE-RSA-AES128-SHA ECDHE-RSA-AES128-SHA256 ECDHE-RSA-AES256-SHA384 DHE-RSA-AES128-GCM-SHA256 DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES128-SHA DHE-RSA-AES256-SHA DHE-RSA-AES128-SHA256 DHE-RSA-AES256-SHA256 EDH-RSA-DES-CBC3-SHA"; # managed by Certbot
if ($scheme != "https"){
return 301 https://$host$request_uri;
}
}
2、根据remote_addr转发流量及if的或匹配
location / {
if ( $remote_addr = "183.18.16.69" ){
rewrite ^/(.*) /saturn-api-canary/$ break;
proxy_pass http://10.42.7.12:32080;
break;
}
if ( $remote_addr = "115.25.5.107" ){
rewrite ^/(.*) /saturn-admin-canary/$ break;
proxy_pass http://10.42.7.12:32080;
break;
}
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_max_temp_file_size ;
proxy_pass http://api;
client_max_body_size 100m;
proxy_read_timeout ;
access_log /var/log/nginx/share.log hehe;
error_log /var/log/nginx/api_error.log warn;
add_header X-Upstream $upstream_addr always;
proxy_redirect off;
}
或匹配:
location / {
if ( $remote_addr ~ "183.18.16.69|115.25.5.107" ){
rewrite ^/(.*) /saturn-api-canary/$ break;
proxy_pass http://10.42.7.12:32080;
break;
}
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_max_temp_file_size ;
proxy_pass http://api;
client_max_body_size 100m;
proxy_read_timeout ;
access_log /var/log/nginx/share.log hehe;
error_log /var/log/nginx/api_error.log warn;
add_header X-Upstream $upstream_addr always;
proxy_redirect off;
}
3、根据header转发流量
location / {
if ( $http_yfflag = 2 ){
rewrite ^/(.*) /saturn-api-canary/$ break;
proxy_pass http://10.42.7.12:32080;
break;
} proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_max_temp_file_size ;
proxy_pass http://api;
client_max_body_size 100m;
proxy_read_timeout ;
access_log /var/log/nginx/share.log hehe;
error_log /var/log/nginx/api_error.log warn;
add_header X-Upstream $upstream_addr always;
proxy_redirect off;
}
4、if实现“与”操作
nginx不支持shell的and、&&实现,也不支持if嵌套,所以采用设置变量的方式实现。首先设置一个变量置为空 set $flag 0;然后根据条件追加值,在最终的if块中根据$flag的值进行判断,实现与和或。切记要在最终的if块中添加break,
否则proxy_pass也会被执行。
AND:
location / {
if ( $remote_addr !~ "183.128.16.69|115.205.5.107" ){
proxy_pass http://10.4.8.77;
break;
}
set $foo "";
if ( $http_fflag = ){
set $foo "${foo}1";
}
if ( $http_dflag = ){
set $foo "${foo}1";
}
if ( $foo ~* "" ){
rewrite ^ http://zipkin.xet.com/zipkin/ break;
break;
}
proxy_pass http://api;
}
5、nginx访问静态资源
这里使用两种方式都可以实现:
两者都是在server段的location下使用
1)使用alias
server{
listen *;
server_name test.eee.com;
location /getQQCode/ {
alias /etc/nginx/qq/;
}
}
提前将静态文件放到alias的目录下面,这样访问http://test.eee.com/getQQCode/index.html,实际服务器的访问路径是/etc/nginx/qq/index.heml。
2)使用root
server{
listen *;
server_name test.eee.com;
location /getQQCode/ {
root /etc/nginx/qq/;
}
}
这样访问http://test.eee.com/getQQCode/index.html,实际服务器的访问路径是/etc/nginx/qq/getQQCode/index.heml。root会将路径进行拼接。例如使用root的时候会将uri /getQQCode/拼接到root的路径后面
即/etc/nginx/qq/getQQCode/index.heml。
nginx 跳转系列的更多相关文章
- Nginx知多少系列之(七)负载均衡策略
目录 1.前言 2.安装 3.配置文件详解 4.工作原理 5.Linux下托管.NET Core项目 6.Linux下.NET Core项目负载均衡 7.负载均衡策略 8.加权轮询(round rob ...
- Nginx知多少系列之(十四)Linux下.NET Core项目Nginx+Keepalived高可用(主从模式)
目录 1.前言 2.安装 3.配置文件详解 4.工作原理 5.Linux下托管.NET Core项目 6.Linux下.NET Core项目负载均衡 7.负载均衡策略 8.加权轮询(round rob ...
- Nginx之旅系列 - Nginx日志功能 PK Linux内核printk
题记:Nginx之旅系列是用来记录Nginx从使用到源码学习的点点滴滴,分享学习Nginx的快乐 Nginx 首页: http://nginx.org/ Nginx日志功能 PK Linux内核pri ...
- Nginx之旅系列 - Nginx的configuration
题记:Nginx之旅系列是用来记录Nginx从使用到源码学习的点点滴滴,分享学习Nginx的快乐 Nginx 首页: http://nginx.org/ Nginx的configuration 今天对 ...
- java应用,直接请求没问题,通过nginx跳转状态吗400
今天配置金融的测试环境,直接调用java应用返回状态200,通通过nginx跳转,会返回400,真是一头雾水..... 参考文档: https://www.cnblogs.com/yanghj010/ ...
- Nginx技术研究系列5-动态路由升级版
前几篇文章我们介绍了Nginx的配置.OpenResty安装配置.基于Redis的动态路由以及Nginx的监控. Nginx-OpenResty安装配置 Nginx配置详解 Nginx技术研究系列1- ...
- nginx 跳转
nginx 跳转 一.需求:当需要在别的机访问本机房的服务器问题. 虚拟主机头配置 server { listen ; server_name test.zlx.com; location / { i ...
- nginx 域名跳转 Nginx跳转自动到带www域名规则配置、nginx多域名向主域名跳转
nginx 域名跳转 Nginx跳转自动到www域名规则配置,如果设置使 mgcrazy.com域名在用户访问的时候自动跳转到 www.mgcrazy.com呢?在网上找了好多资料都没有一个完整能解决 ...
- Nginx知多少系列之(六)Linux下.NET Core项目负载均衡
目录 1.前言 2.安装 3.配置文件详解 4.工作原理 5.Linux下托管.NET Core项目 6.Linux下.NET Core项目负载均衡 7.负载均衡策略详解 8.Linux下.NET C ...
随机推荐
- codeforces 982 c
给你一棵树 让你进行切割 问你最多能切多少刀 使得每个连通分量size都是偶数 思路:首先 要是有奇数个节点的话 那么不管你怎么切割 都会有一个连通分量的size是奇数 所以只有偶数的情况 ...
- 3.window窗口
window组件依赖于draggable.resizable.panel三个组件,这三个组件的特性window都可以使用: dialog组件依赖于window.linkbutton.
- Codeforces Round #265 (Div. 2) E. Substitutes in Number
http://codeforces.com/contest/465/problem/E 给定一个字符串,以及n个变换操作,将一个数字变成一个字符串,可能为空串,然后最后将字符串当成一个数,取模1e9+ ...
- JBoss 系列四十九:JBoss 7/WildFly 中端口使用列表
JBoss 7中端口使用列表 JBoss 7中所有配置都在一个文件中(standaone*.xml, domain.xml),和之前的JBoss相比JBoss 7用到的端口变少,我们将以表格的形式列出 ...
- win10专业版激活工具很不错!
下载链接: http://www.yishimei.cn/?=0xj20
- 轻量级MVVM框架 Stylet
这两天试了下Stylet框架,这个框架虽然很小,但是功能齐全,简化了很多MVVM的代码,比如Command,对Dialog,MessageBox都有很好的支持. 开源地址 https://github ...
- 探究Entity Framework如何在多个仓储层实例之间工作单元的实现及原理(2018-05-31修改部分严重错误代码)
前言 1.本文的前提条件:EF上下文是线程唯一,EF版本6.1.3. 2.网上已有相关API的详细介绍,本文更多的是作为我自己的个人学习研究记录. 3.2018-05-31修改DbSession.cs ...
- UWP Button添加圆角阴影(二)
原文:UWP Button添加圆角阴影(二) 阴影 对于阴影呢,WindowsCommunityToolkit中已经有封装好的DropShadowPanel啦,只要引用Microsoft.Toolki ...
- CF1146H Satanic Panic
题目传送门 Description 给定二维平面内\(n\)个点\((n\leq 300)\),求能组成五角星(不要求正五角星)的五元组个数. Solution 一道小清新的寄蒜几盒计算几何题,代码不 ...
- Mac 下查看端口是否被占用
1. lsof -i :8080 2. netstat -anp tcp | grep 8080 3. nc -w 10 -n -z 127.0.0.1 8070-8090