Nginx Apache DokuWiki

Связка Nginx оптимизация и использование в роли обратного прокси (reverse proxy) FrontEnd, Apache BackEnd и вики-движок DokuWiki.

В этом случае nginx будет лишь посредником (прокси), стоящим перед Apache. Nginx будет служить для балансировки нагрузки и кэширования контента.

Apache будет работать на loopback интерфейсе localhost(127.0.0.1) и порту 81, nginx на всех интерфейсах используя порт 80.

Apache

  • Apache. В Debian для Apache в файле ports.conf нужно изменить директивы NameVirtualHost и Listen. И безусловно нужно проверить директиву VirtualHost для каждого виртуального хоста и убедиться в том что порт там не прописан явно.
    # nano /etc/apache2/ports.conf
    
    NameVirtualHost *:81
    Listen 127.0.0.1:81
    
    <IfModule mod_ssl.c>
        Listen 443
    </IfModule>
    
    <IfModule mod_gnutls.c>
        Listen 443
    </IfModule>
  • Apache. Виртуальный домен wiki.example.com для DokuWiki установка (Nginx + PHP-FPM или Apache), настройка и использование.
    # nano /etc/apache2/sites-available/wiki.example.com
    <VirtualHost *:81>
            ServerName wiki.example.com
            ServerAdmin webmaster@example.com
            DirectoryIndex index.php
            
            SetEnvIf X-Forwarded-Proto https HTTPS=on
    
            ErrorLog  ${APACHE_LOG_DIR}/wiki.example.com-error.log
            CustomLog ${APACHE_LOG_DIR}/wiki.example.com-access.log combined
    
            DocumentRoot /var/www/wikionline
            <Directory /var/www/wikionline/>
                    Options FollowSymLinks MultiViews
                    AllowOverride All
                    Order deny,allow
                    allow from all
            </Directory>
            <LocationMatch "/(data|conf|bin|inc)/">
                    Order allow,deny
                    Deny from all
                    Satisfy All
            </LocationMatch>
    </VirtualHost>
  • Apache. Перезапустим Apache с новыми настройками.
    # /etc/init.d/apache2 restart

Nginx: nginx.conf

  • Подключим в файл nginx.conf файл proxy_params, кторый содержит настройки для режима proxy_pass.
    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_set_header X-Forwarded-Proto https;
  • Создадим виртуальный домен по умолчанию. Виртуальный домен по умолчанию, позволит блокировать (не пересылать Apache) запросы URL которые не описаны. Благодаря использованию listen 80 default_server все обращения на несуществующие хосты будут перенаправляться по умолчанию к данной конфигурации виртуального домена.
  • Листинг nginx.conf
    # nano /etc/nginx/nginx.conf
    user www-data;
    # /etc/security/limits.conf
    # nginx      soft     nproc          65535
    # nginx      hard     nproc          65535
    # nginx      soft     nofile         65535
    # nginx      hard     nofile         65535
    worker_rlimit_core   65535;
    worker_rlimit_nofile 65535;
    worker_processes 6; # не должно превышать количество ядер в процессоре
    pid /var/run/nginx.pid;
    
    events {
    
            worker_connections 10000; # рассчитывается по формуле worker_rlimit_nofile/worker_processes
            # multi_accept on;
    }
    http {
            # Basic Settings
    
            sendfile on;
            client_max_body_size 10M;
            tcp_nopush on;
            tcp_nodelay on;
            keepalive_timeout 65;
            types_hash_max_size 2048;
            # server_tokens off;
    
            # server_names_hash_bucket_size 64;
            # server_name_in_redirect off;
    
            include /etc/nginx/mime.types;
            default_type application/octet-stream;
    
            # Logging Settings
    
            access_log /var/log/nginx/access.log;
            error_log /var/log/nginx/error.log;
    
            # Gzip Settings
            gzip on;
            gzip_disable "msie6";
    
            ##
            # Virtual Host Configs
            ##
    
            include /etc/nginx/proxy_params; # Host X-Real-IP X-Forwarded-For
    
    server {
    # default_server если не найдено имени виртуального хоста - nginx заблокирует доступ и
    # не будет пересылать запрос Apache
            listen 80 default_server;
            server_name defaultwwwsite;
            access_log /var/log/nginx/000-default-host.access.log;
            deny all;
    }
            include /etc/nginx/conf.d/*.conf;
            include /etc/nginx/sites-enabled/*;
    }

Nginx: виртуальный домен

  • Nginx. Настройка виртуального домена wiki.example.com в Nginx. Директива proxy_pass указывает куда пересылать запросы, которые не обработал nginx (в нашем случае пересылается серверу Apache).
    # nano /etc/nginx/sites-available/wiki.example.com
    server {
            listen 80;
            server_name  wiki.example.com www.wiki.example.com;
            root /var/www/mywiki/;
            index index.php doku.php;
    
            # Buffering
            proxy_buffering     on; # default on
            proxy_max_temp_file_size 0; # 16096m  default 1G
            client_max_body_size 10240m; # 10m
            client_body_buffer_size 128k;
    
            error_log   /var/log/nginx/example.com.info.error.log  warn;
            access_log  /var/log/nginx/example.com.info.access.log;
    
    location = /stat {
            stub_status on;
            access_log  off;
            allow 10.26.95.14;
            allow 10.26.95.251;
            deny all;
            }
    
    location ~ /(data|conf|bin|inc)/ { # Запретить доступ к каталогам data|conf|bin|inc
            deny all;
            }
    
    location ~ /\. { # disabling access for files beginning with a point e.g. .htaccess, .git, .svn
            deny all;
    #       access_log off;
    #       log_not_found off;
            }
    location / {
            proxy_pass http://127.0.0.1:81;
            include /etc/nginx/proxy_params; # Host X-Real-IP X-Forwarded-For
            }
    
    }

Nginx: запуск

  • nginx. Проверим синтаксис конфигурационных файлов nginx.
    # nginx -t
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
  • nginx. Все настройка закончена. Перезапускаем nginx.
    # /etc/init.d/nginx restart
PQ VPS сервера в 28+ странах.