Назад | Перейти на главную страницу

nginx proxy_pass Ошибки POST 404

У меня есть проксирование nginx на сервер приложений со следующей конфигурацией:

location /app/ {
        # send to app server without the /app qualifier
        rewrite /app/(.*)$ /$1 break;
        proxy_set_header Host $http_host;
        proxy_pass http://localhost:9001;
        proxy_redirect http://localhost:9001 http://localhost:9000;
    }

Любой запрос для / app отправляется на: 9001, тогда как сайт по умолчанию размещается на: 9000.

Запросы GET работают нормально. Но всякий раз, когда я отправляю запрос POST на / app / any / post / url, он приводит к ошибке 404. Нажатие на URL-адрес непосредственно в браузере через GET / app / any / post / url приводит к попаданию на сервер приложений, как и ожидалось.

Я нашел в Интернете людей с похожими проблемами и добавил

proxy_set_header Host $http_host;

но это не решило мою проблему.

Ошибки не регистрируются, а журналы доступа выглядят следующим образом:

# For http://localhost:9000 (no proxying)

127.0.0.1 - - [08/Dec/2012:12:29:28 -0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4"

# For http://localhost:9000/app/get/priorities (GET proxy)

127.0.0.1 - - [08/Dec/2012:12:32:17 -0800] "GET /app/get/priorities HTTP/1.1" 200 77 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4"

# When posting to http://localhost:9000/app/create/priority:

127.0.0.1 - - [08/Dec/2012:12:33:50 -0800] "POST /app/create/priority/ HTTP/1.1" 404 188 "http://localhost:9000/form-test.html" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4"

Любые идеи приветствуются.

Спасибо.

Полная конфигурация ниже:

server {
    listen   9000; ## listen for ipv4; this line is default and implied
    #listen   [::]:80 default_server ipv6only=on; ## listen for ipv6

    root /home/scott/src/ph-dox/html;
    # root ../html; TODO: how to do relative paths?
    index index.html index.htm;

    # Make site accessible from http://localhost/
    server_name localhost;

    location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ /index.html;
        # Uncomment to enable naxsi on this location
        # include /etc/nginx/naxsi.rules
    }

    location /app/ {
        # rewrite here sends to app server without the /app qualifier
        rewrite /app/(.*)$ /$1 break;
        proxy_set_header Host $http_host;
        proxy_pass http://localhost:9001;
        proxy_redirect http://localhost:9001 http://localhost:9000;
    }

    location /doc/ {
        alias /usr/share/doc/;
        autoindex on;
        allow 127.0.0.1;
        allow ::1;
        deny all;
    }

}

Моя проблема, проблема не в nginx, а в моем сервере приложений. Я использовал модуль маршрутизации, который требовал, чтобы я явно указывал метод запроса, если не get, и поэтому он выдавал ошибку 404 при публикации, но не при прямом обращении к URL-адресу браузера.