Apache + Nginx: Virtualhost на FreeBSD

На сервере установлен Nginx (0.8.53) + Apache 22 + mod_rpaf .

Для того что бы разместить сайт на сервере, нужно прописать virtualhost (виртуальный хост). Но у нас 2 веб-сервера, следовательно и Nginx (frontend) и Apache (backend) нужно прописать виртуалхосты:1. Apache:
Один из вариантов это создать отдельный файл для виртуалхостов:

ee /usr/local/etc/apache22/extra/httpd-vhosts.conf

NameVirtualHost 127.0.0.1:8080
<VirtualHost 127.0.0.1:8080>
ServerAdmin webmaster@my-host.com
DocumentRoot «/usr/home/master/www/domain»
ServerName domain
ServerAlias www.domain.com
ErrorLog «/var/log/domain-error.log»
CustomLog «/var/log/domain-access.log» common
</VirtualHost>

Или же описать виртуалхост в конце файла /usr/local/etc/apache22/httpd.conf

На этом с Apache закончили.
2. Настраиваем virtualhost в Nginx.
Создадим папку, где будут храниться файлы с нашими виртуалхостами:
mkdir /usr/local/etc/nginx/vhosts
Немного отредактируем конфиг Nginx:

ee /usr/local/etc/nginx/nginx.conf

# пользователь от кого запущен nginx . Не нужно запускать его от root-a
user nginx nginx;
# количество воркеров как и количество ядер

#правда некоторые советуют cpu_core*2
worker_processes 2;
worker_priority -5;
worker_rlimit_nofile 51200;

error_log logs/error.log info;

#pid logs/nginx.pid;

events {
# число одновременных коннектов
worker_connections 2000;
}

http {
include 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 logs/access.log main;

sendfile on;
tcp_nopush on;
tcp_nodelay on;
send_lowat 12000;

client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
keepalive_timeout 65;
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;

output_buffers 4 32k;

#Compressing
gzip on;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 8k;
proxy_buffers 16 64k;
proxy_buffering on;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 10m;
#proxy_connect_timeout 120s;
proxy_redirect off;

include vhosts/*.conf;

Тут пока все.
Переходим в папку vhosts и создаем конфигурационный файл виртуалхоста:

cd vhosts
ee domain.conf
server {
listen 80;
server_name domain.org www.domain.org;

access_log logs/domain.org.access.log main;
open_file_cache max=100000 inactive=40s;
open_file_cache_valid 60s;
open_file_cache_min_uses 2;
open_file_cache_errors on;

# Main location
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 1000m;
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 ~ .flv$ {
flv;
}
# То что отдаем обрабатывать nginx, все что не попало , отдает апач
location ~* ^.+.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|flv|rtf|js|swf|iso)$ {
root /usr/local/www/domain;
}

}

После чего перезапускаем:

# apachectl restart

и

# nginx restart

И радуемся

http://rg74.ru

Обновлено: 12.03.2015