19.05.2015

Nginx настройка/заметки/nginx.conf

Модуль rewrite (заглушка):

#nano /etc/nginx/conf.d/default.conf

server {
  listen 80;
  location / {
    rewrite ^.*$ /maintance.html;
  }

  location /maintance.html {
    alias /var/www/html/maintance.html;
    expires -1;
  }
}

or:

server {
        listen       192.168.1.107:80;
        server_name  localhost;

        location / {
            root   /usr/local/www/nginx;
            index  index.html index.htm;
        }

        rewrite ^/(.*) http://192.168.1.80 redirect;
        return 403;
    }

Перенаправление запросов на порт - заглушку.
iptables -t nat -A PREROUTING -i eth1 -p tcp --destination-port 80 -j REDIRECT --to-port 8088
iptables -t nat -A PREROUTING -i eth1 -p tcp --destination-port 443 -j REDIRECT --to-port 8088



p.s......
#Debtors forwarding 
/sbin/iptables -I FORWARD -o eth1 -p udp --dport 53 -d 8.8.8.8 -j ACCEPT #разрешаем ходить на DNS 
#создаем таблички в ipset 
/usr/local/sbin/ipset -F DEBTORS 
/usr/local/sbin/ipset -X DEBTORS 
/usr/local/sbin/ipset -N DEBTORS ipmap --network 172.16.0.0/24 #Тут возможно у Вас своя подсеть 
/sbin/iptables -t nat -I PREROUTING -m set --set DEBTORS src -p tcp -d ! 172.16.0.0/24 --dport 80 -j DNAT --to-destination 172.16.0.1:85 #у меня виртуалхост висит на 85 порту

nginx как front-end к apache:


Вешаем apache на порт 8080 (или на другой, кроме 80)
Вносим изменения в конфигурацию апача:
/etc/apache2/ports.conf
NameVirtualHost *:8080
Listen 8080

Если есть виртуальные хосты, то их тоже нужно повесить на порт 8080
Настраиваем nginx
Создаем файл конфигурации в директории: /etc/nginx/sites-available
server {
listen *:80; ## listen for ipv4
server_name ВАШ_ДОМЕН;
access_log /var/log/nginx/access.log;

# Перенаправление на back-end
location / {
proxy_pass ВАШ_ДОМЕН:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 120;
proxy_send_timeout 120;
proxy_read_timeout 180;
}
# Статическиое наполнение отдает сам nginx
# back-end этим заниматься не должен
location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js|html|txt)$ {
root ПУТЬ_ДО_КОРНЕВОГО_КАТАЛОГА_САЙТА;
}
}

Балансировка запросов на Apache (2е ноды) Nginx:

# nano /etc/nginx/conf.d/all.conf
upstream webservers {
# Перечисляем все backend между которыми nginx будет балансировать клиентов, говорим количество fail для баны backend ноды и таймаут
        server  192.168.1.81:8080 weight=10 max_fails=60 fail_timeout=2s;
        server  192.168.1.82:8080 weight=10 max_fails=60 fail_timeout=2s;

}

server  {
        listen          192.168.1.80:80;
        server_name     balanser.xxx.com.ua www.balanser.xxx.com.ua
        reset_timedout_connection  on; #заставляет nginx принудительно закрывать соединения в состоянии ожидания по истечению таймаута.

location / {
        proxy_pass      http://webservers;
        proxy_next_upstream error timeout invalid_header http_500 http_503; #указывает модулю проксирования, что надо переходить к следующему бекэнду в случае возникно$
        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_redirect off; #запрещает выполнять редирект
        proxy_connect_timeout 30; #описывает время ожидания ответа от бекэнда.
}
}

Nginx.conf с описаниями:


# cat /etc/nginx/nginx.conf
user nginx;
# Количество процессов ожидаюищих соединения
worker_processes 10;
# Максимум коннектов worker_proces`s*worker_connect`s
worker_rlimit_nofile 30000;
pid /var/run/nginx.pid;
events {
# Максимальное количество обслуживаемых клиентов онлайн
worker_connections 1024;
# epoll — эффективный метод, используемый в Linux 2.6+ http://nginx.org/ru/docs/events.html
use epoll;
# Рабочий процесс за один раз будет принимать сразу все новые соединения
multi_accept on;
}
error_log /var/log/nginx/error.log warn;

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

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
connection_pool_size 256;
client_header_buffer_size 4k;
client_max_body_size 100m;
large_client_header_buffers 8 8k;
request_pool_size 4k;
output_buffers 1 32k;
postpone_output 1460;

# Все страницы будут ужиматься gzip
gzip on;
gzip_min_length 1024;
gzip_proxied any;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/xml application/xml application/x-javascript text/javascript text/css text/json;
gzip_comp_level 5;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 75 20;
server_names_hash_max_size 8192;
ignore_invalid_headers on;
server_name_in_redirect off;

proxy_buffer_size 8k;
proxy_buffers 8 64k;
proxy_connect_timeout 1000;
proxy_read_timeout 12000;
proxy_send_timeout 12000;

# Мы рассказываем где будет храниться кеш, но по умолчанию я его не использую
proxy_cache_path /var/cache/nginx levels=2 keys_zone=pagecache:5m inactive=10m max_size=50m;
# Передаем backend реальный адрес клиента для mod_rpaf
real_ip_header X-Real-IP;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
allow all;

include /etc/nginx/conf.d/*.conf;
}