В это статье я расскажу как быстро развернуть LAMP сервер на Ubuntu с кеширующим nginx
Для всех команд необходим sudo, потому сразу войдем для удобства в этот режим:
1 |
sudo su |
Далее, обновляем данные из репозитариев:
1 |
apt-get -y update |
Установка MySQL сервер:
1 |
apt-get install mysql-server mysql-client |
Во время установки нас попросят ввести пароль root для сервера MySQL, вводим 2 раза. Дожидаемся окончания установки.
Установка Apache, nginx, php:
1 |
apt-get install apache2 nginx apache2-mpm-prefork apache2-utils libapache2-mod-php5 php5 php5-dev php5-mysql php5-common php5-curl php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-mhash php5-ming php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl |
Дожидаемся окончания установки.
Включаем модули rewrite и include в apache2 при помощи утилиты — a2enmod:
1 2 |
a2enmod rewrite a2enmod include |
Меняем порт в apache2 со стандартного 80 на 8080 (2 строчки):
1 2 3 |
nano /etc/apache2/ports.conf NameVirtualHost *:8080 Listen 8080 |
Создаем новый веб сервер (VirtualHost), создаем файл конфигурации:
1 |
touch /etc/apache2/sites-available/domain.com |
И вставляем в него следующий текст:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<VirtualHost *:8080> ServerName domain.com ServerAlias www.domain.com ServerAdmin admin@domain.com DocumentRoot /var/www/domain.com <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www/domain.com/> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> ErrorLog /var/log/domain.com_error.log LogLevel warn CustomLog /var/log/domain.com_access.log combined </VirtualHost> |
Далее, создаем папку сайта и запускаем сайт:
1 2 |
mkdir -p /var/www/domain.com a2ensite domain.com |
Проверяем в браузере — http://domain.com:8080
Конфигурируем nginx:
1 |
nano /etc/nginx/nginx.conf |
Приводим конфиг к такому виду:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
user www-data; worker_processes 4; #По количеству ядер pid /var/run/nginx.pid; error_log /sites/nginx/error.log; events { worker_connections 4096; multi_accept on; } http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; server_tokens off; include /etc/nginx/mime.types; default_type application/octet-stream; access_log /var/log/nginx-access.log; error_log /var/log/nginx-error.log; gzip on; gzip_disable «msie6″; gzip_proxied any; gzip_min_length 500; gzip_proxied expired no-cache no-store private auth; gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; } |
Далее создаем и правим конфиг нашего сайта:
1 |
nano /etc/nginx/sites-enabled/domain.com |
Вносим в него следующие записи:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
upstream backend { server 127.0.0.1:8080; } server { listen 80; server_name domain.com www.domain.com; access_log /var/log/nginx-access.log; error_log /var/log/nginx-error.log; location / { proxy_pass http://backend; include /etc/nginx/proxy.conf; } location ~* .(jpg|jpeg|gif|png|ico|css|bmp|swf|js|mov|avi|mp4|mpeg4) { root /var/www/domain.com; } location ~ /.ht { deny all; } } |
Перезапускаем сервисы и проверяем работу:
1 2 |
service apache2 restart service nginx restart |
Источник: http://evolan.org/linux/ubuntu-ustanovka-i-nastrojka-svyazki-nginx-apache-php-mysql/
https://corp2.info/razrabotka-i-sozdanie-sajtov-internet-magazinov-veb-proektov-kiev-1038.html
А як перевіряти роботу? Куда дививтися, що переглядати? 🙂 Подальшу роботу не розумію … )) Я не думаю, що з встановленням будуть проблеми я думаю, що далі робити ))
Як завжди – створюєте домен, в нього вставляєте php-скрипт та дивитесь виконується він чи ні.
а чи можна не використовувати віртуальні домени ? і застосувати таку ж схему тіки без віртуалнього хосту
Внутрі мережі – можна використовувати віртуальні домени. Віртуальні хости – використовуються завжди.
Привожу пример реальных конфигов:
Nginx. Файл:
/etc/nginx/sites-enabled/i1.kiev.ua (называю, обычно, как называется домен)
server {
listen *:80;
root /var/www/k2shop/corp2.eu/corp2-eu/corp2.eu;
index index.php index.htm index.html;
server_name i1.kiev.ua http://www.i1.kiev.ua *.i1.kiev.ua;
###access_log /var/log/nginx/corp2_net_access.log;
###error_log /var/log/nginx/corp2_net_error.log;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
# error_page 404 @err404;
# error_page 500 502 503 504 /;
# Вот он наш кусок
if ($cookie_kmysecretcookie != “ksecretcookievalue”) {
rewrite ^/(wp\-admin/|wp\-login\.php) /not-found.html redirect;
}
# Deny public access to wp-config.php
location ~* wp-config.php {
deny all;
}
location ~* xmlrpc.php {
deny all;
}
# Запрет доступа к файлу, откуда можно узнать о версии WordPress
location ~* readme.html {
deny all;
}
# Закрываю обращение к wpad.dst, т.к. идут постоянные запросы
location ~* wpad.dat {
deny all;
}
# Статическиое наполнение отдает сам nginx
# back-end этим заниматься не должен
location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|bmp|swf|js|txt|exe|7z|rar|pdf|jfif|zip|htm|arj|fla|avi|fla|shtml|rss|atom|jad|wml|htc|tif|tiff|wbmp|jng|svg|svgz|jar|war|ear|json|hqx|doc|ps|eps|ai|rtf|xls|ppt|wmlc|kml|kmz|cco|jardiff|jnlp|rpm|sea|xhtml|xpi|dll|bin|deb|dmg|eot|iso|img|msi|msp|msm|ogx|mid|midi|kar|mpga|mpega|mp2|mp3|m4a|oga|ogg|spx|ra|weba|3gpp|3gp|mp4|mpeg|mpg|mpe|ogv|mov|webm|flv|mng|asx|asf|wmv|avi)$ {
root /var/www/k2shop/corp2.eu/corp2-eu/corp2.eu;
access_log off;
expires 10d;
break;
}
# Перенаправление на back-end
# location / {
# proxy_pass http://127.0.0.1:8080;
# proxy_redirect http://i1.kiev.ua:8080/ /;
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $remote_addr;
# proxy_connect_timeout 120;
# proxy_send_timeout 120;
# proxy_read_timeout 180;
# }
# Статическиое наполнение отдает сам nginx
# back-end этим заниматься не должен
# location ~* {
# proxy_pass http://127.0.0.1:8080;
# proxy_redirect http://i1.kiev.ua:8080/ /;
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $remote_addr;
# proxy_connect_timeout 120;
# proxy_send_timeout 120;
# proxy_read_timeout 180;
# }
location / {
#### limit_conn addr 5;
try_files $uri $uri/ /index.php?$args;
}
# Add trailing slash to */wp-admin requests.
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
# Directives to send expires headers and turn off 404 error logging.
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires 24h;
log_not_found off;
}
# Pass uploaded files to wp-includes/ms-files.php.
rewrite /files/$ /index.php last;
# For multisite: Use a caching plugin/script that creates symlinks to the correct subdirectory structure to get some performance gains.
set $cachetest “$document_root/wp-content/cache/ms-filemap/${host}${uri}”;
if ($uri ~ /$) {
set $cachetest “”;
}
if (-f $cachetest) {
# Rewrites the URI and stops rewrite processing so it doesn’t start over and attempt to pass it to the next rule.
rewrite ^ /wp-content/cache/ms-filemap/${host}${uri} break;
}
if ($uri !~ wp-content/plugins) {
rewrite /files/(.+)$ /wp-includes/ms-files.php?file=$1 last;
}
# Uncomment one of the lines below for the appropriate caching plugin (if used).
# include global/wordpress-ms-subdir-wp-super-cache.conf;
# include global/wordpress-ms-subdir-w3-total-cache.conf;
# Rewrite multisite ‘…/wp-.*’ and ‘…/*.php’.
if (!-e $request_filename) {
rewrite ^/[_0-9a-zA-Z-]+(/wp-.*) $1 last;
rewrite ^/[_0-9a-zA-Z-]+(/.*\.php)$ $1 last;
}
# Pass all .php files onto a php-fpm/php-fcgi server.
location ~ \.php$ {
#### limit_conn addr 5; # Задаёт зону разделяемой памяти и максимально допустимое число соединений для одного значения ключа. При превышении этого числа в ответ на запрос сервер вернёт ошибку 503 (Service Temporarily Unavailable)
# Zero-day exploit defense.
# http://forum.nginx.org/read.php?2,88845,page=3
# Won’t work properly (404 error) if the file is not stored on this server, which is entirely possible with php-fpm/php-fcgi.
# Comment the ‘try_files’ line out if you set up php-fpm/php-fcgi on another machine. And then cross your fingers that you won’t get hacked.
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# fastcgi_intercept_errors on;
fastcgi_pass php;
}
}
Теперь, файл Apache (в каталоге /etc/apache2/sites-available):
i1.kiev.ua.conf
Обратите внимание, что расширение файла должно быть .conf.
Содержимое файла:
ServerName i1.kiev.ua
ServerAlias i1.kiev.ua http://www.i1.kiev.ua
ServerAdmin rs@corp2.net
DirectoryIndex index.html index.htm index.php
DocumentRoot /var/www/wordpress/i1.kiev.ua
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# log_format main ‘$http_x_forwarded_for – $remote_user [$time_local] “$host” “$request” $status $body_bytes_sent “$http_referer” “$http_user_agent” $request_time’;
Делаете по аналогии с приведенными конфигами и все должно работать.
Минутку… Это конфиг для fastcgi (у меня и такой вариант используется).
Это описывалось в статье, аналогичной: https://corp2.info/nalashtuvannya-nginx-php-fpm-dlya-roboti-bagato-sajtovosti-v-wordpress-231.html
Для чистого nginx + apache:
Файл nginx (corp2.kiev.ua):
server {
listen *:443 ssl;
listen *:80;
root /var/www/k2shop/corp2.kiev.ua/corp2-kiev-ua/site/corp2.kiev.ua;
index index.php index.htm index.html;
server_name corp2.kiev.ua http://www.corp2.kiev.ua corp2shop.corp2.net http://www.corp2shop.corp2.net;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
error_page 404 /;
error_page 500 502 503 504 /;
if ( $scheme = “http” ) {
rewrite ^/(.*)$ https://$host/$1 permanent;
}
location ~* xmlrpc.php {
deny all;
}
keepalive_timeout 60;
ssl_certificate /etc/nginx/ssl/1_corp2.kiev.ua_bundle.crt;
ssl_certificate_key /etc/nginx/ssl/corp2.kiev.ua.key;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers “RC4:HIGH:!aNULL:!MD5:!kEDH”;
add_header Strict-Transport-Security ‘max-age=604800’;
location ~* /k2billing/ {
### limit_conn addr 5;
proxy_pass http://192.168.20.233:80;
proxy_redirect http://192.168.20.233:80/ /;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 30;
proxy_send_timeout 30;
proxy_read_timeout 30;
}
location ~* /demo_upr_neb/ {
### limit_conn addr 5;
proxy_pass http://192.168.20.233:80;
proxy_redirect http://192.168.20.233:80/ /;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 30;
proxy_send_timeout 30;
proxy_read_timeout 30;
}
location ~* /demo_ut3/ {
### limit_conn addr 5;
proxy_pass http://192.168.20.233:80;
proxy_redirect http://192.168.20.233:80/ /;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 30;
proxy_send_timeout 30;
proxy_read_timeout 30;
}
# Перенаправление на back-end
location / {
### limit_conn addr 5; # Задаёт зону разделяемой памяти и максимально допустимое число соединений для одного значения ключа. При превышении этого числа в ответ на запрос сервер вернёт ошибку 503 (Service Temporarily Unavailable)
proxy_pass http://127.0.0.1:8080;
proxy_redirect http://corp2.kiev.ua:8080/ /;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 120;
proxy_send_timeout 120;
proxy_read_timeout 180;
}
# Статическиое наполнение отдает сам nginx
# back-end этим заниматься не должен
location ~* {
proxy_pass http://127.0.0.1:8080;
proxy_redirect http://corp2.kiev.ua:8080/ /;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 120;
proxy_send_timeout 120;
proxy_read_timeout 180;
}
}
Файл apache (corp2.kiev.ua.conf):
ServerName corp2.kiev.ua
ServerAlias corp2.kiev.ua http://www.corp2.kiev.ua corp2shop.corp2.net http://www.corp2shop.corp2.net
ServerAdmin rs@corp2.net
DirectoryIndex index.html index.htm index.php
DocumentRoot /var/www/k2shop/corp2.kiev.ua/corp2-kiev-ua/site/corp2.kiev.ua
ErrorDocument 404 /
php_admin_value display_errors 0
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# log_format main ‘$http_x_forwarded_for – $remote_user [$time_local] “$host” “$request” $status $body_bytes_sent “$http_referer” “$http_user_agent” $request_time’;
Данный код можно убрать. Это отдельные настройки для обращений к отдельным папкам проекта… Они вам не нужны:
location ~* /k2billing/ {
### limit_conn addr 5;
proxy_pass http://192.168.20.233:80;
proxy_redirect http://192.168.20.233:80/ /;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 30;
proxy_send_timeout 30;
proxy_read_timeout 30;
}
location ~* /demo_upr_neb/ {
### limit_conn addr 5;
proxy_pass http://192.168.20.233:80;
proxy_redirect http://192.168.20.233:80/ /;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 30;
proxy_send_timeout 30;
proxy_read_timeout 30;
}
location ~* /demo_ut3/ {
### limit_conn addr 5;
proxy_pass http://192.168.20.233:80;
proxy_redirect http://192.168.20.233:80/ /;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 30;
proxy_send_timeout 30;
proxy_read_timeout 30;
}