SebWeo.com
У світі веб-серверів часто говорять про протистояння Nginx vs Apache. Але що, якби я сказав вам, що їх можна не протиставляти, а змусити працювати разом, доповнюючи сильні сторони один одного? Саме така ідея лежить в основі популярної конфігурації, де Nginx виступає в ролі реверс-проксі перед Apache.
Я сам довгий час використовував таку зв’язку на багатьох проєктах і вважаю, що розуміння її принципів є ключовим для будь-якого системного адміністратора чи веб-розробника, який прагне оптимізувати роботу сайту. Давайте розберемося, як це працює і коли це може бути найкращим рішенням.
Ідея проста: ми використовуємо Nginx для того, що він робить найкраще, а Apache — для його унікальних переваг.
mod_php)..htaccess, надаючи гнучкість налаштування для користувачів.Таким чином, ми отримуємо краще з обох світів: швидкість Nginx для статики та з’єднань + гнучкість Apache для динаміки та конфігурації.
.htaccess: Користувачі (особливо на віртуальному хостингу) можуть продовжувати використовувати звичні .htaccess для редиректів, правил доступу тощо.
X-Forwarded-For).
Давайте я покажу базову конфігурацію. Припустимо, Apache вже налаштований і працює на порту 8080, а Nginx буде слухати порт 80.
Переконайтеся, що Apache слухає нестандартний порт. Відредагуйте файл конфігурації портів (зазвичай /etc/apache2/ports.conf):
# Listen 80 Listen 8080 # Listen 443 https (якщо використовуєте SSL на Apache, що зазвичай не потрібно в цій схемі)
Також змініть порт у конфігурації вашого віртуального хоста (/etc/apache2/sites-available/my-site.conf):
# Замість <VirtualHost *:80>
<VirtualHost *:8080>
# ... решта конфігурації ...
</VirtualHost>
Перезапустіть Apache: sudo systemctl restart apache2.
Тепер налаштуємо Nginx, щоб він слухав порт 80, віддавав статику сам, а все інше проксіював на Apache.
Створіть або відредагуйте конфігурацію сайту в Nginx (наприклад, /etc/nginx/sites-available/my-site-proxy.conf):
server {
listen 80;
server_name example.com www.example.com;
# Коренева папка сайту (та сама, що й в Apache)
root /var/www/my-site/public;
index index.php index.html index.htm;
# Спочатку намагаємося віддати статичний файл
location / {
try_files $uri $uri/ @apache; # Якщо файлу немає, передаємо на Apache
}
# Пряма віддача популярної статики (оптимізація)
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 7d; # Кешуємо статику
# try_files $uri =404; # Можна додати, щоб не турбувати Apache, якщо файлу немає
}
# Блок для передачі запитів на Apache
location @apache {
proxy_pass http://127.0.0.1:8080; # Адреса та порт, де слухає Apache
# Передача реальної 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;
proxy_set_header X-Forwarded-Proto $scheme;
}
# Забороняємо доступ до .htaccess (Nginx їх не використовує)
location ~ /\.ht {
deny all;
}
}
Увімкніть конфігурацію та перезавантажте Nginx:
sudo ln -s /etc/nginx/sites-available/my-site-proxy.conf /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl reload nginx
Щоб Apache бачив реальну IP-адресу відвідувача (а не IP вашого сервера), потрібно встановити та налаштувати модуль mod_remoteip (для Apache 2.4+) або mod_rpaf (для старих версій). Він буде читати заголовок X-Forwarded-For, який ми передаємо з Nginx.
Хоча для нових проєктів я зазвичай рекомендую використовувати чисту зв’язку Nginx + PHP-FPM через її простоту та ефективність, тандем Nginx + Apache все ще має право на життя. На мою думку, він є чудовим компромісним рішенням, коли:
.htaccess.Це класична, перевірена часом архітектура, яка дозволяє отримати значний приріст продуктивності, зберігши при цьому гнучкість Apache. Головне — розуміти, як вона працює, та правильно її налаштувати.
Коли я починав свій шлях у веб-розробці, питання "який веб-сервер використовувати?" практично не стояло. Відповідь…
Коли мова заходить про веб-сервери, два імені завжди на слуху: Apache та Nginx. Apache —…
У світі веб-розробки ми постійно стикаємося з проблемою: "А в мене на комп'ютері все працює!".…
На зорі моєї кар'єри веб-розробника все було відносно просто: встановив локальний сервер (пам'ятаєте Denwer?), поклав…
Якщо ви коли-небудь цікавилися, як прискорити свій сайт на WordPress, ви, напевно, чули про "кешування".…
Коли ми говоримо про веб-розробку, перше, що спадає на думку — це HTML та CSS.…