Тож одним із самих швидких варіантів оптимізації буде використання веб-серверу Nginx, як фронтенду до Apache. Тобто Nginx буде обробляти всю статику (запити на картинки, джаваскрипти, css і тд), а у випадку якщо відбудеться запит на php-скрипт чи щось таке (динамічний контент) - запит буде відправлено на обробку нашому "жирному" другу Apache-у.
Як показує практика такий варіант значно (!) економить ресурси серверу, адже запущених дочірніх процесів apache буде менше, з левовою часткою запитів буде справлятись Nginx.
Перейдемо до конфігурації.
1) Встановлюємо Apache (чи щось інше що буде у вас бекендом) та nginx з усіма запропонованими залежностями.
2) Конфігуруємо Nginx, щоб він слухав стандартний 80-порт і віддавав всю статику напряму, якщо буде запрошено динамічний контент - запит буде відсилано Apache-y.
cat /etc/nginx/nginx.conf
# Використовуємо користувача від якого працює сервер Apache
user www-data;
# Кількість дочірніх процесів, обирають за к-тю ядер CPU
worker_processes 4;
worker_rlimit_nofile 8192;
# Місцезнаходження логу помилок і pid-файлу
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
use epoll;
accept_mutex off;
}
http {
server_names_hash_bucket_size 64;
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
# Опції reverse proxy
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;
# Опції gzip компресії.
gzip on;
gzip_http_version 1.0;
gzip_comp_level 6;
gzip_min_length 0;
gzip_buffers 16 8k;
gzip_proxied any;
gzip_types text/plain text/css text/xml text/javascript application/xml application/xml+rss application/javascript application/json;
gzip_disable "MSIE [1-6]\.";
gzip_vary on;
# Включення додаткових конфігураційних файлів
include /etc/nginx/sites-enabled/*.conf;
}
Далі в директорії /etc/nginx/sites-available створюємо конфігураційний файл віртуалхосту:
server {
listen 80;
server_name wordpress.site;
access_log off;
error_log off;
location / { proxy_pass http://127.0.0.1:8080; }
location ~* ^.+\.(htm|html|jpg|jpeg|gif|png|ico|css|zip|tgz|gz|bz2|pdf|odt|txt|tar|bmp|rtf|js|swf|avi|mp4|mp3|ogg|flv)$ {
expires 30d; #adjust to your static content's update frequency
root /var/www/wordpress;
}
}
І тепер робимо лінку на цей файл в /etc/nginx/sites-enabled :
ln -s /etc/nginx/sites-available/worpress.site /etc/nginx/sites-enabled/worpress.conf
Зроблено це для зручності, тобто для того щоб відключити сайт - можна просто видалити лінку, а не коментувати кожен рядок файлу конфігурації.
Отже, як бачимо з останнього конфігураційного файлу всі запити на динаміку будуть відсилатись на http://127.0.0.1:8080, а на цьому порту у нас якраз і працює Apache.
3) Отже міняємо порт Апача з 80, що стоїть по замовчуванню, на 8080. Для цього необхідно змінити директиву Listen на:
Listen 127.0.0.1:8080
Тож тепер 8080 порт буде слухатись лише з localhost і зовні його не буде видно.
3) Отже міняємо порт Апача з 80, що стоїть по замовчуванню, на 8080. Для цього необхідно змінити директиву Listen на:
Listen 127.0.0.1:8080
Тож тепер 8080 порт буде слухатись лише з localhost і зовні його не буде видно.
Ну і власне конфіг самого віртуалхоста для Apache:
<VirtualHost 127.0.0.1:8080>
ServerAdmin myemail@example.com
ServerName wordpress.site
DocumentRoot /var/www/wordpress
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/wordpress>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Тобто по-суті його особливо змінювати не треба, а треба лиш поправити директиву VirtualHost.
4) Далі робимо рестарт/релоад вебсерверів і для впевненості перевіряємо відкриті порти
netstat -tulpn | egrep '(apache|nginx)'
tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 13067/apache2
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 12186/nginx
Далі все має працювати.
Зауваження/запитання, будь ласка, пишіть в коментарі.
Корисні лінки:
http://www.cyberciti.biz/tips/using-nginx-as-reverse-proxy.html
http://www.openlogic.com/wazi/bid/188107/Add-a-Nginx-Reverse-Proxy-to-Your-LAMP-Setup
Немає коментарів:
Дописати коментар