Решено: Upstream sent too big header while reading response header from upstream // NginX PHP FPM

Решено: Upstream sent too big header while reading response header from upstream when using NginX PHP FPM
Когда вы используете NginX , а в качестве upstream PHP — FPM server.

salmon_2[1]
Continue reading

Varnish+Nginx на Centos 5.x

И так, начнем с Varnish — это http accelerator. Если у Вас есть большое количество мелких файлов, отдающихся с диска и дисковый кеш Вас уже не спасает — это решение для Вас. Кроме всего прочего на основе varnish’a (но не только) можно построить архитектуру, позволяющую масштабировать это решение горизонтально без особых проблем.

Но, я его буду использовать в связке с nginx настроенным как бекэнд вот по этой статье

Установка Varnish:

rpm —nosignature -i http://repo.varnish-cache.org/redhat/el5/noarch/varnish-release-2.1-2.noarch.rpm
yum install varnish

Переходим в папочку /etc/varnish/ и открываем файлик default.vcl вносим следующие изменения:

backend default {
.host = «localhost»;
.port = «8080»; # Порт на котором слушает Apache!
}

Дальше в nginx вносим следующие изменения:

proxy_pass http://127.0.0.1:6081; # Трафик в Varnish

Перезапускаем nginx, apache и varnish. Не забудьте добавить varnish в автозагрузку.

Быстрая настройка Nginx+Apache на Centos 5.x с использованием VirtualHost

И так, начинаем с установки Nginx. Для этого нам будет необходим CentAlt репозитарий, инструкция по установке тут. После установки репозитария:

yum install nginx

Теперь перенастроим Apache, для этого открываем etc/httpd/conf/httpd.conf и меняем там NameVirtualHost на:

NameVirtualHost 127.0.0.1:8080

так же меняем открывающий таг каждого виртуального хоста:

<VirtualHost 127.0.0.1:8080>

В принципе с Apache-м все, переходим в /etc/naginx и открываем nginx.conf. И так, общие параметры:

user nginx;
worker_processes 4;
error_log /var/log/nginx/error.log debug;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}

Параметры http сервера:

http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main ‘$remote_addr — $remote_user [$time_local] $status ‘
‘»$request» $body_bytes_sent «$http_referer» ‘
‘»$http_user_agent» «http_x_forwarded_for»‘;
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
#Архивирование контента
gzip on;
gzip_min_length 1100;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain application/xml application/x-javascript text/javascript text/css;
gzip_disable «msie6»;
gzip_disable Firefox/([0-2]\.|3\.0);
gzip_disable Chrome/2;
gzip_disable Safari;
gzip_comp_level 3;

И теперь для каждого Виртуального хоста должна быть следующая запись:

server {
listen 80;
server_name teaseo.ru www.teaseo.ru;
access_log /var/log/nginx/host.access.log main;
location / {
proxy_pass http://127.0.0.1:8080/;
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;
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 10m;
}

Если вы ходите кешировать какой-то контен, то просто добавьте в описание:

location /uploads/files {
add_header Content-type application/octet-stream;
internal;
}
location /uploads/img {
#Кеширум картинки месяца на 4
expires 4M;
#Кешируем везде (и на прокси и на клиентах)
add_header Cache-Control public;
}
location /cache/tumb/ {
#Кеширум картинки месяца на 4
expires 4M;
#Кешируем везде (и на прокси и на клиентах)
add_header Cache-Control public;
}

Теперь полный конфиг, что бы не запутаться что куда и как:

user nginx;
worker_processes 4;
error_log /var/log/nginx/error.log debug;
pid /var/run/nginx.pid; events {
worker_connections 1024;
}
## Timeouts
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main ‘$remote_addr — $remote_user [$time_local] $status ‘
‘»$request» $body_bytes_sent «$http_referer» ‘
‘»$http_user_agent» «http_x_forwarded_for»‘;
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
gzip on;
gzip_min_length 1100;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain application/xml application/x-javascript text/javascript text/css;
gzip_disable «msie6»;
gzip_disable Firefox/([0-2]\.|3\.0);
gzip_disable Chrome/2;
gzip_disable Safari;
gzip_comp_level 3; server {
listen 80;
server_name teaseo.ru www.teaseo.ru;
access_log /var/log/nginx/host.access.log main;
location / {
proxy_pass http://127.0.0.1:8080/;
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;
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 10m;
}
}
server {
listen 80;
server_name wot-news.com www.wot-news.com;
access_log /var/log/nginx/host.access.log main;
root /var/www/vhosts/wot-news.com/http;
expires epoch;
location / { proxy_pass http://127.0.0.1:8080/;
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;
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 10m;
}
location /uploads/files {
add_header Content-type application/octet-stream;
internal;
}
location /uploads/img {
#Кеширум картинки месяца на 4
expires 4M;
#Кешируем везде (и на прокси и на клиентах)
add_header Cache-Control public;
}
location /cache/tumb/ {
#Кеширум картинки месяца на 4
expires 4M;
#Кешируем везде (и на прокси и на клиентах)
add_header Cache-Control public;
}
}
}

Nginx HTTP redirect с requested домена на другой адрес

редирект без использования location:

server {
listen IP:80;
server_name requested_domain.tld;
rewrite ^ http://target_domain.tld$request_uri;
}

редирект с использованием location:

server {
listen IP:80;
server_name requested_domain.tld;
location = / { rewrite ^ http://redirect.to/; }
}

Nginx — could not build the server_names_hash, you should increase server_names_hash_bucket_size

После того, как я добавил виртуальный хост на nginx, при перезапуске появилась вот такая ошибка

root@server [/etc/init.d]# service nginx restart
2009/06/19 12:22:17 [emerg] 4322#0: could not build the server_names_hash, you should increase server_names_hash_bucket_size: 32
2009/06/19 12:22:17 [emerg] 4322#0: the configuration file /etc/nginx/nginx.conf test failed
root@server [/etc/init.d]#

Для того, что бы избавиться от данной ошибки, заходим в nginx.conf:

vi /etc/nginx/nginx.conf

Находим там

http {

и добавляем после:

server_names_hash_bucket_size 64;

Nginx Блокируем досту Ip адресам и подсетям

В Nginx есть простой модуль ngx_http_access_module который управляет доступом. У него достаточно простой синтаксис:

deny IP; 
deny subnet;  
allow IP;  
allow subnet;  
# block all ips  
deny    all;  
# allow all ips  
allow    all;

Важно помни что правила проверяются по очереди.

Для того, что бы Nginx начал блокировать IP адреса необходимо зайти в файл nginx.conf и добавить следующую строку%

include blockips.conf;

После этого создадим файл blockips.conf в котором добавим:

deny 1.1.1.1
deny 2.2.2.2
deny 3.3.3.3

где 1.1.1.1 2.2.2.2 и 3.3.3.3 адреса которые необходимо заблокировать. Сохраняем и перезапускаем Nginx.

Как я говорил раньше, конфиг считывается последовательно, то есть, если вам например нужно запретить доступ определенной подсети, но исключить один IP адрес, то выглядеть это будет так:

location / {
  allow   192.168.1.1;
  deny    192.168.1.0/24;
}

И последнее, создадим свой HTTP 403 Сообщение об ограниченном доступе. Заходим в папку /usr/local/nginx/html и редактируем файл error403.html:

<html>  
<head><title>Error 403 - IP Address Blocked</title>
</head>  
<body>  
Your IP Address is blocked. If you this an error, please contact webmaster with your IP at webmaster@example.com 
</body> 
</html>  

Если включен SSL то вы можете так же показать IP клиента:

Your IP Address is <!--#echo var="REMOTE_ADDR" --> blocked.

Поле этого добавьте в nginx.conf:

# redirect server error pages to the static page
 error_page   403  /error403.html;
 location = /error403.html {
         root   html;
 }

перещзапустите nginx

Устанавливаем nginx как Reverse Proxy балансировщик нагрузки

Nginx это Web и Reverse proxy сервер. Очень часто он устанавливается перед Apache сервером. То есть, все запросы сначала поступают nginx, и затем, если необходимо, переиздаются полностью или частично, основному web серверу.

Схема работы

Internet--
         |
    =============                               |---- apache1 (172.16.1.15)
    | ISP Router|                               |
    =============                               |---- apache2 (172.16.1.16)
         |                                      |
         |                                      |---- db1 (172.16.1.17)
         |      |eth0 -> 172.16.1.11 ----------/
         |-lb0==|                        /
         |      |eth1 -> 80.91.175.92 ----/
         |
         |      |eth0 -> 172.16.1.10 ----------\
         |-lb1==|                        /      |---- apache1 (172.16.1.15)
                |eth1 -> 80.91.175.92 ----/       |
                                                |---- apache2 (172.16.1.16)
                                                |
                                                |---- db1 (172.16.1.17)

Continue reading