US: +1 561 2500001/EU: +359 2 4925555 LiveChat
[email protected] Sign Up Login
ITLDC
  • SSD VDS
  • HD VDS
  • Серверы
  • Хостинг
  • Поддержка
  • Блог
  • Контакт
  • [EN]
  • [UA]
  • SSD VDS
  • HD VDS
  • Серверы
  • Хостинг
  • Поддержка
  • Блог
  • Контакт
  • [EN]
  • [UA]

Переносим сайт на Wordpress на VDS с NGINX

Переносим сайт на WordPress на VDS с NGINX

Июн 5, 2014DmytroНовости

Несмотря на то, что существуют коммерческие и бесплатные панели управления серверами, в ряде случаев есть смысл использовать не готовые решения, а размещать вэбсайты на сервере или VDS, настроенном вручную. Объяснение этому простое — панель требует для своей работы определенных ресурсов (это особенно заметно на небольших VDS) и не всегда позволяет делать «тонкую» настройку.

Если вы знаете, что такое командная строка unix-машины и умеете пользоваться текстовыми редакторами для работы с файлами конфигурации, давайте попробуем перенести блог на WordPress на VDS или выделенный сервер, а заодно — немного ускорим работу нашего вэбсайта. Отметим, что для других CMS последовательность действий обычно такая-же, но могут потребоваться небольшие изменения в настройках nginx.

Итак, закажем SSD VDS, выберем Centos в качестве операционной системы. Примерно через 5 минут виртуальный сервер будет готов и можно будет приступать к настройке.

Сначала — обновим установленные пакеты и уберем штатные правила iptables:

Shell
1
2
3
iptables -F
service iptables save
yum -y update

Изменение настроек iptables требуется, так как мы уберем со стандартного порта ssh-сервер, чтобы усложнить жизнь желающим подобрать пароли. Сделаем это одной командой (XXXX замените на желаемый порт) и перезапустим ssh-сервер:

Shell
1
2
sed -e 's/^#Port 22$/Port XXXX/g'  -ibak /etc/ssh/sshd_config
service sshd restart

Не закрывая текущую сессию, проверим доступ к нашему серверу с использованием нестандартного ssh-порта. Если все в порядке, перезагрузим VDS командой reboot.

Далее установим необходимые серверные компоненты. Мы будем использовать PHP-FPM, Nginx и Mysql для нашего вэбсайта. Подключаем дополнительные репозитории, устанавливаем пакеты и запускаем mysqld:

Shell
1
2
3
4
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
yum --enablerepo=remi install nginx mysql mysql-server php-fpm php-mysql php-gd
service mysqld start

Следующим шагом назначим пароль суперпользователя MySQL и удалим тестовые таблицы. Это проще всего сделать с помощью утилиты mysql_secure_installation:

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# /usr/bin/mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!
 
In order to log into MySQL to secure it, we'll need the current
password for the root user.  If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
 
Enter current password for root (enter for none):
OK, successfully used password, moving on...
 
Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.
 
Set root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
 
 
By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.
 
Remove anonymous users? [Y/n] y
... Success!
 
Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.
 
Disallow root login remotely? [Y/n] y
... Success!
 
By default, MySQL comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.
 
Remove test database and access to it? [Y/n] y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
 
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
 
Reload privilege tables now? [Y/n] y
... Success!
 
Cleaning up...
 
All done!  If you've completed all of the above steps, your MySQL
installation should now be secure.
 
Thanks for using MySQL!

Самое время заняться нашим вэбсервером. Создаем каталог для вэбсайта:

1
mkdir -p /var/www/blog.net

После этого создаем в любимом текстовом редакторе файл конфигурации виртуального хоста для nginx. В нашем случае файл называется /etc/nginx/conf.d/blog.net.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
server {
    listen       80;
    server_name blog.net www.blog.net;
 
    root   /var/www/blog.net;
    index index.php index.html index.htm;
 
    gzip              on;
    gzip_buffers      16 8k;
    gzip_comp_level   4;
    gzip_http_version 1.0;
    gzip_min_length   1280;
    gzip_types        text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript image/x-icon image/bmp;
    gzip_vary         on;
    location / {
        try_files $uri $uri/ /index.php?$args;
    }
    location ~ \.php$ {
        root           /var/www/blog.net;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;
        fastcgi_intercept_errors on;
        include        fastcgi_params;
    }
    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires 30d;
        log_not_found off;
    }
}

Отметим ключевые моменты — мы включаем gzip-сжатие для более быстрой загрузки сайта, файлы с расширение php отправляем на обработку php-fpm, а для статичных ресурсов генерируем заголовок Expires для кэширования на стороне посетителя сайта. Эти простые изменения позволяют объективно ускорить скорость загрузки сайта.

Перейдем к настройке PHP-FPM. Единственное изменение, которое необходимо сделать — сменить uid (пользователя, от которого работают процессы интерпретатора). Сделаем это одной командой с помощью sed:

1
sed -e 's/ = apache$/ = nginx/g'  -ibak /etc/php-fpm.d/www.conf
.

Основная часть настройки готова. Включим автозапуск необходимых компонентов, запустим их и сделаем тестовый php-файл для проверки работы нашей конструкции:

1
2
3
4
5
6
chkconfig --levels 235 mysqld on
chkconfig --levels 235 nginx on
chkconfig --levels 235 php-fpm on
service php-fpm start
service nginx start
echo "<?php phpinfo(); ?>" > /var/www/blog.net/phpinfo.php

Если все сделано без ошибок, то теперь можно с помощью любимого вэбброузера зайти по адресу http://ip-адрес-сервера/phpinfo.php и увидеть информацию о версии PHP и установленных модулях. В дальнейшем этот файл стоит удалить, а пока — приступим к переносу нашего блога.

Создаем базу данных (вместо XXXX подставьте пароль к MySQL, а вместо blogdb — имя базы данных сайта):

1
mysqladmin -uroot -pXXXX create blogdb

С помощью консоли mysql добавим нового пользователя и предоставим ему привелегии для работы с базой данных blogdb. Запустим mysql -uroot -pXXXX и выполним три команды:

1
2
3
CREATE USER 'bloguser'@'localhost' IDENTIFIED BY 'PaSsWoRd';
GRANT ALL PRIVILEGES ON bloguser.* TO 'blogdb'@'localhost';
FLUSH PRIVILEGES;

На этом настройка нашего сервера закончена. С помощью scp или sftp поместим резервную копию файлов нашего сайта в /var/www/blog.net. SQL-дамп базы данных можно загрузить следующей командой:

1
mysql -uroot -pXXXX blogdb < dump.sql
.

Финальный штрих — установим корректные права на файлы:

1
chown -R nginx.nginx /var/www/

После этого можно проверять работоспособность нашего сайта и указывать в доменной зоне новый IP сайта. По окончании обновления DNS можно наслаждаться тем, насколько быстрее стал работать наш сайт — даже без дополнительной оптимизации:

pingdom-deineka-net

Полезные ссылки:

  • tools.pingdom.com — онлайн-сервис проверки скорости загрузки сайта
  • just-ping.com — проверка «видимости» IP с разных локаций
  • checkgzipcompression.com — включено ли gzip-сжатие?
  • dnssy.com — онлайн-тест DNS
  • — документация nginx
  • — Веб-сервер на основе Nginx и PHP-FPM

Дополнение от 16 июля 2014 года: нам написал Роман Булах с уточнениями к данной записи. Ниже — его обоснованные замечания.

1. в конфиге php-fpm не указан open_basedir
2. необходимо запретить некоторые функции
php_admin_value[disable_functions] = dl,exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
3. Обязательно установить security.limit_extensions = .php .php3 .php4 .php5
4. В php.ini следует указать cgi.fix_pathinfo = 0

Теперь nginx conf
Параметры php должны получить настройки путей к скриптам. Нужно указать расположение root точно:

1
2
3
4
5
6
7
8
location ~ \.php$ {
# это лишнее - root /var/www/blog.net; нужно удалить
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params; должен стартовать до опций fastcgi_param
fastcgi_param SCRIPT_FILENAME /var/www/blog.net$fastcgi_script_name; добавить рут для скриптов с точным указанием.
fastcgi_intercept_errors on;
}

Самое главное — инклудить php нужно после всех опций с локациями. Иначе, если пользователь захочет закрыть доступ, допустим, к папке config и ко всему что в ней, то это будет невозможно сделать полноценно. Сама папка будет закрыта, а файлы config.php в ней будут доступны.

Рекомендованные Романом конфигурационные файлы доступны на pastebin: blog.net.conf и fpm-www.conf. Спасибо за ценные замечания!

Tags: centos,  nginx
Related Posts
  • Выпущен Centos 8

  • Как «растянуть» файловую систему VDS после смены тарифа без потери данных?

  • Простой способ подключиться по RDP к Linux VDS

  • Запускаем Ghost в контейнере Docker

← Лицензии Windows Server для наших пользователей
О нас пишут — обзор ITLDC SSD VDS на Lowendbox →

Recent Posts

  • 🐬 5 Modern MySQL-Compatible Databases Worth Knowing
    🐬 5 Modern MySQL-Compatible Databases Worth Knowing

    These days, saying “I’m using MySQL” is...

  • 🛠️ Mission Complete: NL Datacenter Maintenance Report!
    🛠️ Mission Complete: NL Datacenter Maintenance Report!

    Last week, while most people were enjoyi...

  • Disk Usage 🧮  in Linux: Tools, Tips, and That One Mysterious 20GB Log File
    Disk Usage 🧮 in Linux: Tools, Tips, and That One Mysterious 20GB Log File

    You’re running your awesome website, cru...

  • OpenSSH 10.0 Released – New Tricks for Your Trusted Terminal Buddy
    OpenSSH 10.0 Released – New Tricks for Your Trusted Terminal Buddy

    TL;DR: OpenSSH just hit version 10.0, an...

  • 🛠️ DUS Datacenter Maintenance Complete: New Servers In!
    🛠️ DUS Datacenter Maintenance Complete: New Servers In!

    Guten Tag, liebe Hosting-Freunde! 🇩🇪 Gue...

  • Bash Process Management: How to Tame Your Shell Like a Pro
    Bash Process Management: How to Tame Your Shell Like a Pro

    Running Linux commands is cool. Running...

  • 🚀 Beyond Nginx: Exploring the Best Lightweight Web Servers for PHP & HTTPS
    🚀 Beyond Nginx: Exploring the Best Lightweight Web Servers for PHP & HTTPS

    Nginx has long been the go-to web server...

  • Mastering the Art of Redirecting Chaos: Linux Shell I/O Redirection Explained
    Mastering the Art of Redirecting Chaos: Linux Shell I/O Redirection Explained

    So, you’ve finally made friends with the...

US/APAC Support

ITLDC

PO Box #800054
Aventura
FL 33280
USA

+1 561 2500001

[email protected]

EU Support

Smart Industries LLC

187E Warm Springs Rd B218
Las Vegas
NV 89119
USA

+1 561 2500001

[email protected]

Services

  • SSD VDS
  • Dedicated Servers
  • Shared Hosting
  • Colocation
  • DDoS Protection
  • SSL Certificates
  • Backup Storage
  • Reselling

Support

  • Get Help
  • ITLDC Status
  • Looking Glass
  • Our SLA
  • Datacenters
  • FAQ & Knowledgebase
  • Data Security
  • Contact us

© Copyright 1995-2019 ITLDC Team. You can freely use or share information from this site with a hyperlink to the original page.