nginx cross-domain request. PUT, POST, DELETE requests are converted to GET processing methods
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;
}
}
Note: The
put post delete request needs to be redirected to test02.com. In order to reach test02 also visit www.test02.com/api/xxxxxx
My test02 is configured with ingress-nginx as follows
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