ngnix+proxy+mongrel => real host

Julien Biard julien.biard at citycampus.com
Fri Apr 27 12:02:43 MSD 2007


Hi,


I want to use ngnix + mongrel in proxy with different URLs, e.g 
site1.com, site2.fr... and I need to get the real host in my application 
(with request.host) and not the host used in upstream declaration.
Any idea ?


In this case, I have mongrel as host instead of site1.com or site2.fr :/

Best regards,


Julien


%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<
/etc/nginx/ngnix.conf

user nginx nginx;
worker_processes 2;

error_log /var/log/nginx/error_log info;

events {
   worker_connections 1024;
     use epoll;
}

http {
     include        /etc/nginx/mime.types;
     default_type    application/octet-stream;

     log_format main
         '$remote_addr - $remote_user [$time_local] '
     '"$request" $status $bytes_sent '
         '"$http_referer" "$http_user_agent" '
         '"$gzip_ratio"';

     client_header_timeout    10m;
     client_body_timeout    10m;
     send_timeout 10m;

     connection_pool_size 256;
     client_header_buffer_size    1k;
     large_client_header_buffers    4 2k;
     request_pool_size    4k;

     output_buffers 1 32k;
     postpone_output    1460;

     sendfile on;
     tcp_nopush on;
     tcp_nodelay    on;

     keepalive_timeout    75 20;

     ignore_invalid_headers on;

     index index.html;

   gzip on;
   gzip_min_length 1100;
   gzip_buffers 4 8k;
   gzip_types text/plain;

     client_max_body_size 11000k;

   upstream mongrel {
         server 127.0.0.1:8000;
         server 127.0.0.1:8001;
         server 127.0.0.1:8002;
         server 127.0.0.1:8003;
   }


     # ruby/mongrel
     server {
         listen 80;
         server_name site1.com;

         error_log    /var/log/nginx/site1.com_error.log;
         include /etc/nginx/include;
     }

     server {
         listen 80;
         server_name site2.fr;
         error_log    /var/log/nginx/site2.fr_error.log;
         include /etc/nginx/include;

     }

}

%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<
/etc/nginx/include :


         listen 80;

     root /home/www/app/current/public;

         access_log  off;
     rewrite_log on;

     # / -> first search for local index.html then go to mongrel
     location ~ ^/$ {
             if (-f /index.html){
                 rewrite (.*) /index.html last;
             }
             proxy_pass  http://mongrel;
     }

     # rail caching: searching first for $action.html local pages
     location / {
             if (!-f $request_filename.html) {
             proxy_pass  http://mongrel;
             }
             rewrite (.*) $1.html last;
     }

     # serve static files directly
     location ~ .html {
             root /home/www/app/current/public;
     }

     location ~* 
^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|rtf|js|mov)$ 
{
             root /home/www/app/current/public;
     }

     # resend everything else to mongrel
     location / {
             proxy_pass  http://mongrel;
             proxy_redirect     off;
             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;
     }

%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<%<






More information about the nginx mailing list