nginx только отправляет GET запросы единорогу - PullRequest
1 голос
/ 30 сентября 2011

Я пытаюсь запустить приложение Rails 3 через прокси через nginx для единорога, используя следующий виртуальный хост.

upstream nginx {
  server unix:/tmp/nginx.socket fail_timeout=0;
}

server {
    listen 80;
    server_name nginx.domain.net;

    rewrite ^(.*) https://nginx.mydomain.net$1 permanent;
}


server {
    listen 443 ssl;
    server_name nginx.mydomain.net;

    root /home/me/nginx.mydomain.net/current/public;
    access_log /home/me/nginx.mydomain.net/shared/log/access.log;
    error_log /home/me/nginx.mydomain.net/shared/log/error.log;

    ssl_certificate /etc/nginx/certs/my_crt_chain.crt;
    ssl_certificate_key /etc/nginx/certs/my_crt_key.key;

    rewrite_log on;

    location / {
        proxy_redirect     off;

        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_cache_methods GET HEAD POST;

        client_max_body_size       10m;
        client_body_buffer_size    128k;

        proxy_connect_timeout      90;
        proxy_send_timeout         90;
        proxy_read_timeout         90;

        proxy_buffer_size          4k;
        proxy_buffers              4 32k;
        proxy_busy_buffers_size    64k;
        proxy_temp_file_write_size 64k;

        if (!-f $request_filename) {
          proxy_pass http://nginx;
          break;
        }

    }
}

Когда я запускаю Unicorn и пытаюсь сделать POST-запрос, он отображается в журналах Unicorn как GET-запрос.

I, [2011-09-30T12:38:05.036462 #19364]  INFO -- : unlinking existing socket=/tmp/nginx.socket
I, [2011-09-30T12:38:05.036902 #19364]  INFO -- : listening on addr=/tmp/nginx.socket fd=5
I, [2011-09-30T12:38:05.037435 #19364]  INFO -- : Refreshing Gem list
master process ready
worker=0 ready
worker=1 ready
92.22.194.68 - - [30/Sep/2011 12:38:13] "GET /reset HTTP/1.0" 200 - 0.6486

Я новичок в nginx, но кажется, что каким-то образом запросы POST не отправляются.Я не могу найти proxy_cache_methods set explicity нигде (nginx config, virtual host), но я также установил его explicity, чтобы разрешить POST на этом виртуальном хосте: proxy_cache_methods GET HEAD POST; Независимо от того, включает ли виртуальный хост эту строку или нетлюбая разница.

Я не думал, что стоит публиковать файл конфигурации unicorn.rb, так как, похоже, это проблема с прокси-сервером nginx, но я могу сделать это при необходимости.

1 Ответ

2 голосов
/ 03 октября 2011

Похоже, для блока location также необходимо следующее:

    proxy_set_header X-FORWARDED_PROTO https;
...