nginx 跨域请求。PUT、POST、DELETE请求被转为 GET 处理办法
server {
listen 80;
server_name www.test.com;
access_log /data/nginx/logs/test.log main;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location / {
proxy_pass http://192.168.4.4;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
proxy_connect_timeout 240;
proxy_send_timeout 240;
proxy_read_timeout 240;
}
location ^~ /apiv2/ {
if ($request_method ~ ^(PUT|POST|DELETE)$) {
proxy_pass https://www.test02.com;
break ;
}
rewrite ^/apiv2(/|.*)$ https://www.test02.com/api/$1 permanent;
}
}
注:
put post delete 请求 须要到test02.com 做重定向 。 才能做到到test02 也访问 www.test02.com/api/xxxxxx
我这test02是用ingress-nginx 做的 配置如下
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test02-com
namespace: test
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: 50m
nginx.ingress.kubernetes.io/rewrite-target: /api/test/$2
spec:
rules:
- host: www.test02.com
http:
paths:
- path: /apiv2/test(/|$)(.*)
backend:
serviceName: test-nginx
servicePort: 80