Вирішив таки спробувати ввести в практичне застосування VPS сервер. Планував давно, хотів на площадці Hetzner в якогось реселера, який працює з WebMoney. Та якось потрапила на очі контора Selectel, таки там замовив і можна бавитись. Одразу помітив плюс – при реєстрації доступний інтерфейс роботи з name-серверами, причому безкоштовно, а самі сервери підтримують записи типу SRV, що є великим плюсом в наш час.
Щоправда, саме з цими записами не дуже вийшло, як виявилось, інтерфейс не дозволяє додавати повноцінні записи такого типу, а саме
_jabber._tcp IN SRV 5 0 5190 domain.tld |
написав тікет в сапорт, обіцяли розібратись.
UPD: Пофіксили оперативно
Вибрав встановлення OS Debian GNU/Linux, так як найбільш знайомий з цим дистрибутивом. Встановив apache, mysql, php5, webmin, підняв веб, залив один сайт туди, який успішно запрацював. Лише мій тарифний план передбачає 256 Мб оперативної пам’яті, що мало. Через це не піднімав BIND, оптимізував mysql, і схотів зекономити на apache. Одним з варіантів вирішення є застосування легкого веб-сервера nginx.
Першим і логічним кроком, – встановити nginx:
apt-get install nginx |
Тепер подумати. Nginx виручатиме сервер за наступним принципом: висітиме в процесах і слухатиме 80 порт. В залежності від запиту або віддаватиме сам статичний контент (економія, не запускається важкий apache), у випадку динамічного передаватиме запит apache, і братиме від нього відповідь (якщо в клієнта повільний канал, передаватиме дані не важкий apache, а легкий nginx). Також можливо обійтись взагалі без apache, передаючи динамічний запит fastcgi, та до цього я ще не готовий.
Основний конфіг знаходиться у /etc/nginx/nginx.conf , що природньо, і танцювати будемо від нього.
user www-data; # юзер в системі, з правами якого працює nginx worker_processes 2; # кількість одночасно запущених процесів, рекомендується виставляти рівну кількості ядер процесора error_log /var/log/nginx/error.log; # лог помилок, це зрозуміло pid /var/run/nginx.pid; events { worker_connections 1024; # скільки одночасних з'єднань } http { include /etc/nginx/mime.types; # Типи файлів для формування заголовків default_type application/octet-stream; # mimetype для інших потоків access_log /var/log/nginx/access.log; # лог запитів sendfile on; # опція sendfile дозволяє швидше передавати дані в мережу, # минаючи копіювання в адресний простір, доступна для Linux #tcp_nopush on; #keepalive_timeout ; keepalive_timeout 30; # Відведений час для одного з'єднання, згідно потреби, зважаючи на вільні worker_connections tcp_nodelay on; gzip on; gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript; # Що стискаємо include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; # підключаємо конфіги, подібно до апача, тобто кладемо їх в /etc/nginx/sites-available # і робим сімлінки в /etc/nginx/sites-enabled/ } |
Ось, тепер пройдемось по індивідуальних секціях server{} для кожного віртуалхоста:
Для всіх: /etc/nginx/sites-available/default
server { server_name localhost; access_log /var/www/logs/localhost.nginx_access.log; error_log /var/www/logs/localhost.nginx_error.log; include /etc/nginx/server.conf; } |
Тут зрозуміло, аналогічно, як і для інших, наприклад, /etc/nginx/sites-available/srv.if.ua
server { server_name srv.if.ua; access_log /var/www/logs/srv.if.ua.nginx_access.log; error_log /var/www/logs/srv.if.ua.nginx_error.log; include /etc/nginx/server.conf; } |
і на завершення, спільний конфіг для всіх, який, щоб не повторювати в кожній секції server{},
виніс в окремий файл server.conf
listen 80; # Решту записів пропускаємо апачу на 81 порт location / { proxy_pass http://188.93.19.250:81; 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_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; } # ніззя по http отримати файл .htaccess location ~ /\.ht { deny all; } # статику віддаємо і кешуємо на 30 днів location ~* ^.+\.(gif|jpg|jpeg|png|ico|css|swf|js|xml|txt|gz|zip|bmp|xls)$ { access_log off; expires 30d; #fastcgi_intercept_errors on; # $http_host - сюди підставляється ім'я запитаного хоста, в директиві root шлях до кореня сайту, # щоби для кожного індивідуально не прописувати root /var/www/$http_host; } |
Як бачимо, конфіг простий і логічний, виходячи з існуючих параметрів, можна нашаманити решту потрібних оптимізацій, включно до повної відмови від apache.
Тепер буде спокій, щоправда, подібний підхід застосовний до своїх серверів, в продакшн шаред хостингах навряд чи статика віддається подібним чином, хіба що створені свої методи.
2 Comments
Маленьки корективи, без образ. (:
Бекенд в даному випадку apache, а джікса – фронтенд.
Замість апача для динаміки краще заюзати fast-cgi у звязці з spawn-fcgi.
Все добре, про бекенд і фронт правильно, то я переплутав.
а fastcgi не хочу, хочу апач зі всіма плюшками (: