Virtual hosts
http {
server {
listen 192.168.10.1;
listen 192.168.10.1:8000;
server_name one.example.com
www.one.example.com; ...
}
server {
listen 192.168.10.1;
listen 192.168.10.2:8000;
listen 9000;
server_name two.example.com
www.two.example.com; ...
}
server {
listen 9000;
server_name three.example.com
www.three.example.com; ...
}
}
301 redirect for
www.example.com ? example.com
server {
listen 80;
server_name example.com
www.example.com; if ($host != 'example.com' ) {
rewrite ^/(.*)$
http://example.com/$1 permanent;
proxy_set_header Host "example.com";
}
}
Accelerated proxing
location / {
proxy_pass
http://localhost:8000/; proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
# needed for HTTPS
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# serve static files directly
location ~* ^.+.(jpg|jpeg|gif)$ {
root /spool/www;
access_log off;
expires 30d;
}
Simple load balancing
Servers can listen on different ports. Have support for TCP and Unix sockets.
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com:8080;
server unix:/tmp/backend3;
}
server {
location / {
proxy_pass
http://backend; }
}
Mongrel cluster
FastCGI ruby listeners
SSL support
To not put too much load on the CPU, only one worker and using keep-alive is recommended.
worker_processes 1;
http {
...
server {
listen 443;
ssl on;
ssl_certificate /usr/local/nginx/conf/cert.pem;
ssl_certificate_key /usr/local/nginx/conf/cert.key;
keepalive_timeout 70;
...
}
URL rewrite
location /old_stuff/ {
rewrite ^/old_stuff/(.*)$ /new_stuff/$1 permanent;
}
Regexp in the config
if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /msie/$1 break;
}
if ($http_cookie ~* "id
Zhesto