Блог экспериментатора инженера-разработчика: Infanty.
Я пишу how-to статьи на редкие темы или статьи обзоры - для себя и тех кто со мной работает.
Блог существует при поддержке: "Оккупационных сил Марса".

Установим nginx и Apache, набрав в консоли:

sudo apt-get install nginx apache2 

Создадим файл: /etc/nginx/proxy.conf и внесём в него настройки проксирования для nginx:

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_buffers           32 4k; 

Создадим файл виртуального хоста для nginx: /etc/nginx/sites-available/example.com, следующего содержания:

server {
  listen 000.000.000.000:80;
  server_name example.com;
  
  access_log /var/log/nginx/example.com.log;
  
  location / {
    proxy_pass http://127.0.0.1:8080/;
    include /etc/nginx/proxy.conf;
  }
  
  location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|txt|pdf|bmp|rtf|js)$ {
    root /www/example.com/;
  }
} 

И создадим ссылку на него в директории: /etc/nginx/sites-enabled.

Внимание: вместо 000.000.000.000 необходимо использовать Ip адрес сервера, так же как необходимо использовать реальные пути к папкам и реальные доменные имена.

В данном примере с помощью nginx браузеру пользователя отдаются все файлы которые соответствуют маске заданной в последнем location (при перечислении масок не должно быть пробелов и переносов строк), а все остальные обращения перенаправляются к Apache.

Перезапустим nginx (что бы изменения вступили в силу), набрав в консоли:

sudo /etc/init.d/nginx restart 

Добавим новый виртуальный хост в Apache, для этого создадим и откроем файл: /etc/apache2/sites-available/example.com.conf. После чего внесём в него настройки виртуального хоста:

<VirtualHost *> 
  ServerName www.example.com
  ServerAlias *.example.com example.com

  DocumentRoot /www/www.example.com/
  ScriptAlias /cgi/ "/www/cgi/"
  ScriptAlias /cgi-bin/ "/www/cgi-bin/"

  ErrorLog /var/log/apache2/example.com_errors.log
  CustomLog /var/log/apache2/example.com_custom.log combined
</VirtualHost> 

И создадим ссылку на него в директории: /etc/apache2/sites-enabled.

После этого установим mod-rpaf модуль для Apache (что бы Apache мог получить дополнительную информацию о пользователе), набрав в консоли:

sudo apt-get install libapache2-mod-rpaf 

и добавим в виртуальный хост Apache директивы для активации данного модуля:

<IfModule mod_rpaf.c>
  RPAFenable On
  RPAFsethostname On
  RPAFproxy_ips 127.0.0.1
</IfModule> 

Настроим Apache для общения с nginx, для этого откроем файл: /etc/apache2/ports.conf и укажем серверу Apache что он будет работать с локальным Ip адресом, внеся следующие изменения:

Listen 127.0.0.1:8080 

<IfModule ssl_module>
	Listen 127.0.0.1:443
</IfModule>

<IfModule mod_gnutls.c>
	Listen 127.0.0.1:443
</IfModule>

На последок, что бы Apache не ругался на отсутствие ServerName, допишем строку: ServerName localhost в файл: /etc/apache2/apache2.conf. После чего перезапустим Apache (что бы изменения вступили в силу), набрав в консоли:

 sudo /etc/init.d/apache2 restart