Мій проксі-сервер працює на ip A, і таким чином люди отримують доступ до моєї веб-служби. Конфігурація nginx перенаправить на віртуальну машину на ip B.
Для проксі-сервера в IP A я маю це на своїх доступних сайтах
server {
listen 443;
ssl on;
ssl_certificate nginx.pem;
ssl_certificate_key nginx.key;
client_max_body_size 200M;
server_name localhost 127.0.0.1;
server_name_in_redirect off;
location / {
proxy_pass http://10.10.0.59:80;
proxy_redirect http://10.10.0.59:80/ /;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 80;
rewrite ^(.*) https://$http_host$1 permanent;
server_name localhost 127.0.0.1;
server_name_in_redirect off;
location / {
proxy_pass http://10.10.0.59:80;
proxy_redirect http://10.10.0.59:80/ /;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Зображення proxy_redirect
було взято з того, як я можу nginx пересилати HTTP POST-запити через перезапис?
Все, що потрапить у загальнодоступний IP, потрапить на 443 через перезапис. Внутрішньо ми пересилаємо до 80 на віртуальну машину.
Але коли я запускаю сценарій python, такий як наведений нижче, щоб перевірити нашу конфігурацію
import requests
data = {'username': '....', 'password': '.....'}
url = 'http://IP_A/api/service/signup'
res = requests.post(url, data=data, verify=False)
print res
print res.json
print res.status_code
print res.headers
Я отримую 405 Method Not Allowed
. У nginx ми з'ясували, що, потрапляючи на внутрішній сервер, внутрішній nginx отримував GET
запит, навіть якщо в початковому заголовку ми це зробили POST
(це було показано в сценарії Python).
Тож, схоже, у переписування є проблема. Будь-яка ідея, як це виправити? Коли я прокоментував перезапис, він напевно набрав 80, і він пройшов. Оскільки перезапис зміг поговорити з нашим внутрішнім сервером, тому переписати себе не має жодних проблем. Це просто переписують впала POST
до GET
.
Дякую!
(Про це також запитають на форумі Nginx, оскільки це критичний блокатор ...)
PUT
,POST
,DELETE
,GET
. У попередньому налаштуванні у мене не було цього додаткового проксі на фронті, який обслуговував натовп. У мене була однакова конфігурація на тому ж внутрішньому сервері (нашому тестовому сервері). Це прекрасно працює.