Ubuntu: установка и настройка связки nginx + apache + php + mysql

В это статье я расскажу как быстро развернуть LAMP сервер на Ubuntu с кеширующим nginx

Для всех команд необходим sudo, потому сразу войдем для удобства в этот режим:

Далее, обновляем данные из репозитариев:

Установка MySQL сервер:

Во время установки нас попросят ввести пароль root для сервера MySQL, вводим 2 раза. Дожидаемся окончания установки.

Установка Apache, nginx, php:

Дожидаемся окончания установки.
Включаем модули rewrite и include в apache2 при помощи утилиты — a2enmod:

Меняем порт в apache2 со стандартного 80 на 8080 (2 строчки):

Создаем новый веб сервер (VirtualHost), создаем файл конфигурации:

И вставляем в него следующий текст:

Далее, создаем папку сайта и запускаем сайт:

Проверяем в браузере — http://domain.com:8080

Конфигурируем nginx:

Приводим конфиг к такому виду:

Далее создаем и правим конфиг нашего сайта:

Вносим в него следующие записи:

Перезапускаем сервисы и проверяем работу:

Источник: http://evolan.org/linux/ubuntu-ustanovka-i-nastrojka-svyazki-nginx-apache-php-mysql/

Разработка и создание сайтов, интернет-магазинов, веб-приложений, порталов, лэндингов, мобильных приложений (Киев)

10 комментариев

  • А як перевіряти роботу? Куда дививтися, що переглядати? 🙂 Подальшу роботу не розумію … )) Я не думаю, що з встановленням будуть проблеми я думаю, що далі робити ))

    • Як завжди — створюєте домен, в нього вставляєте 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;
    }

  • Опять же таки, в посте выше показывалось применительно для https.
    Убираем не нужное (https и не нужные каталоги), получаем конфиг для nginx по протоколу http:
    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;

    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’;

    # Перенаправление на 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;
    }

    }

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *