Всем привет.
Сайт уставновленный композером на свежий сервер выдает:
403 Forbidden nginx/1.18.0 (Ubuntu).
До этого в папке web лежал index.nginx-debian.html, так что приветственная информация при заходе на сайт выдавалась.
Права и владельца в папке сайта менял:
Комментарии
повбывав бы! (с)
покажи конфиг вирт.хоста nginx
он где-то в /etc/nginx/sites-availiable/domain-name.conf
конфиг вирт.хоста nginx
/etc/nginx/sites-available/default:
listen 80 default_server;
listen [::]:80 default_server;
# SSL configuration
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
# include snippets/snakeoil.conf;
root /var/www/Ц.Ы.Ф.Р.Ы/web;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
# pass PHP scripts to FastCGI server
#
#location ~ \.php$ {
# include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
# fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
правил только тут:
root /var/www/Ц.Ы.Ф.Р.Ы/web;
не-не-не
listen 80 default_server;
- это хост по умолчанию, он будет отображаться в том случае, если в других конфигах не нашлось директивыserver_name
c именем домена, к которому идет запрост.е. - это конфиг заглушки
удали из /var/www/Ц.Ы.Ф.Р.Ы/web все что перенес из друпала, и верни туда обратно файл index.nginx-debian.html, сайты обычно лежат в /var/www/, там создавай папку domain.name и в конфиге вирт.хоста директива
root
будет/var/www/domain.name/web
создавай свой конфиг вирт.хоста в sites-available, обычно их называют по доменному имени + .conf, чтобы потом не ломать себе мозг глядя в конфиги
за основу бери https://www.nginx.com/resources/wiki/start/topics/recipes/drupal/ вдумчиво заменив там доменное имя, путь к папке с друпалом (root), ip - на свои
после этого надо создать симлинк из sites-available в sites-enabled
a2ensite тут не работает, поскольку это не апач, поэтому ручками:
ln -s /etc/nginx/sites-available/domain.name.conf /etc/nginx/sites-enabled/
затем нужно сказать nginx чтобы обновил конфиг:
sudo nginx -s reload
что касается владельца и прав ФС:
заведи обычного юзера, без доступа к sudo на сервере - под ним ты будешь править/обновлять файлы друпала, и смени владельца папки с друпалом на него:
chown -R username:username /var/www/domain.name
и права на файлы и папки:
find /var/www/domain.name/ -type f -exec chmod 644 {} \;
под юзером username ты сможешь делать composer require/install, ну или просто заливать код по (s)ftp
вебсерверу туда нечего писать, если не собираешься обновлять модули через админку
а для папки с файлами нужно сменить владельца, чтобы вебсервер мог там писать
проверь, от кого у тебя работает nginx: в /etc/nginx/nginx.conf и php-fpm: /etc/php/X.Y/fpm/pool.d/www.conf
директивы
user
в обоих конфигах, обычно там www-dataменяй владельца:
chown -R www-data:www-data /var/www/domain.name/web/sites/default
но если ты собираешься запускать на сервере из консоли что-нибудь вроде
drush cr
, что меняет файлы (кеша) в sites/default/files, то нужно дать возможность твоему username тоже туда писать:- добавить username в группу www-data:
sudo usermod -a -G www-data username
- разрешить группе www-data писать в sites/default/files:
find /var/www/domain.name/web/sites/default/files/-type f -exec chmod 664 {} \;
Drupal из коробки заточен под Apache.
NGINX надо настраивать.
В документации это написано.
PS. там же написано про /sites/default/files:
Security note: Universal permission like 0777 is not secure and usage of such is discouraged.
"Drupal из коробки заточен под Apache."
Вот Андрюха мне сказал https://drupal.ru/node/145702 использовать nginx + php-fpm
Я то думал шо це за Андрій такий, шо свой репозиторий имеет
add-apt-repository ppa:ondrej/php
1. я про nginx не силен. апач работает через пользователя www-data. посмотрите через какого пользователя работает nginx .
2. на сайте nginx есть специальный конфиг для друпал.
3. на nginx надо включать поддержку .htaccess
4. у вас VDS или шаред хостинг? проще работать с шаред у которого есть ssh и совместим с друпал(композером).
1. от какого пользователя?
root 58800 0.0 0.0 51432 1492 ? Ss 08:11 0:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data 58801 0.0 0.0 52000 5068 ? S 08:11 0:00 nginx: worker process
www-data 58802 0.0 0.0 52000 5068 ? S 08:11 0:00 nginx: worker process
www-data 58803 0.0 0.0 52000 5116 ? S 08:11 0:00 nginx: worker process
www-data 58804 0.0 0.0 52000 5116 ? S 08:11 0:00 nginx: worker process
root 60663 0.0 0.0 10756 652 pts/0 R+ 11:45 0:00 grep --color=auto nginx
2. специальный конфиг
https://www.nginx.com/resources/wiki/start/topics/recipes/drupal/ - куда этот файл ложить?
Заменить им содержимое /etc/nginx/nginx. conf?
3. на nginx надо включать поддержку .htaccess
Я ж думал что запрет отсутствует, раз закоментировано:
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
Или где-то еще надо прописать?
1. надо chown -R www-data:www-data * делать
2,3. не надо мучится. ставьте апачи+php-fpm . и все будет работать на большой скорости. то что народ пишет про тормоза это про апачи+php mod .
Я готов мучаться. Только ссылку на документацию мне бы внятную. Так что с этим конфиг файлом делать?
я с nginx не силен. думаю класть надо вместо основного конфига (/etc/nginx/sites-available/default). только свои пути прописать.
Конечно нет, надо создать новый конфиг из этого шаблона, заменив там часть данных, например домен и путь до webroot.
Аpache + mod_php быстрее чем apache + php-fpm, на самом деле. Apache не ставят не из-за скорости обработки отдельных запросов, а из-за ресурсоёмкости излишней на каждый запрос, даже к статике.
есть тесты производительности апачи mod_php и php-fpm? я таких не нашел.
это не моё, мне подбросили
Давайте еще раз. Для начала я хочу завести это под рутом, чтоб убедиться что оно вообще работает а потом уже создавать пользователя.
Итак хостинг выдал мне сервер, реального домена пока нет, поэтому Ц.Ы.Ф.Р.Ы
Код отсюда
https://www.nginx.com/resources/wiki/start/topics/recipes/drupal/
Положил сюда:
/etc/nginx/sites-available/Ц.Ы.Ф.Р.Ы.conf
Изменил в коде только:
server_name Ц.Ы.Ф.Р.Ы;
root /var/www/Ц.Ы.Ф.Р.Ы/web;
Выполнил
ln -s /etc/nginx/sites-available/Ц.Ы.Ф.Р.Ы.conf /etc/nginx/sites-enabled/
Выставил группу
chown -R www-data:www-data *
Поставил права:
find /var/www/Ц.Ы.Ф.Р.Ы/ -type f -exec chmod 644 {} \;
find /var/www/Ц.Ы.Ф.Р.Ы/web/sites/default/files/ -type d -exec chmod 775 {} \;
find /var/www/Ц.Ы.Ф.Р.Ы/web/sites/default/files/ -type f -exec chmod 664 {} \;
Потом
systemctl restart nginx
По заходу на сайт получаю:
502 Bad Gateway
nginx/1.18.0 (Ubuntu)
Что-то забыл?
наверно надо php установить. что показывает systemctl status ?
что в /var/log/nginx/error.log ?
PHP 8.2.11 (cli) (built: Oct 6 2023 09:46:55) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.11, Copyright (c) Zend Technologies
with Zend OPcache v8.2.11, Copyright (c), by Zend Technologies
● vmi1481536.contaboserver.net
State: running
Jobs: 0 queued
Failed: 0 units
Since: Wed 2023-10-18 15:10:49 CDT; 23h ago
CGroup: /
├─268 bpfilter_umh
├─user.slice
│ └─user-0.slice
│ ├─session-110.scope
│ │ ├─ 62627 sshd: root@pts/0
│ │ ├─ 62658 -bash
│ │ ├─105227 systemctl status
│ │ └─105228 pager
│ ├─session-108.scope
│ │ ├─62564 sshd: root@notty
│ │ └─62606 /usr/lib/openssh/sftp-server
│ └─user@0.service …
│ └─init.scope
│ ├─62573 /lib/systemd/systemd --user
│ └─62575 (sd-pam)
├─init.scope
│ └─1 /sbin/init
└─system.slice
├─irqbalance.service
│ └─441 /usr/sbin/irqbalance --foreground
├─systemd-networkd.service
│ └─323 /lib/systemd/systemd-networkd
├─systemd-udevd.service
│ └─299 /lib/systemd/systemd-udevd
├─cron.service
│ └─436 /usr/sbin/cron -f
├─nginx.service
│ ├─62949 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
│ ├─62957 nginx: worker process
│ ├─62958 nginx: worker process
│ ├─62959 nginx: worker process
│ └─62960 nginx: worker process
├─polkit.service
│ └─507 /usr/lib/policykit-1/polkitd --no-debug
├─networkd-dispatcher.service
│ └─443 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers
├─accounts-daemon.service
│ └─435 /usr/lib/accountsservice/accounts-daemon
├─php8.2-fpm.service
│ ├─13881 php-fpm: master process (/etc/php/8.2/fpm/php-fpm.conf)
│ ├─13892 php-fpm: pool www
│ └─13893 php-fpm: pool www
├─systemd-journald.service
│ └─243 /lib/systemd/systemd-journald
├─unattended-upgrades.service
│ └─510 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal
├─ssh.service
│ └─499 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
├─mysql.service
│ └─554 /usr/sbin/mysqld
├─rsyslog.service
│ └─445 /usr/sbin/rsyslogd -n -iNONE
├─systemd-resolved.service
│ └─422 /lib/systemd/systemd-resolved
├─dbus.service
│ └─437 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
├─systemd-timesyncd.service
│ └─428 /lib/systemd/systemd-timesyncd
├─system-getty.slice
│ └─getty@tty1.service
│ └─1517 /sbin/agetty -o -p -- \u --noclear tty1 linux
└─systemd-logind.service
└─448 /lib/systemd/systemd-logind
вроде все нормально. я тестирую так. создаю простенький файл phpinfo.php в каталоге сайта
<?php
phpinfo();
?>
и вызываю его. localhost/phpinfo.php для теста.
в /var/log/nginx/error.log
2023/10/19 07:21:08 [error] 14570#14570: *5 directory index of "/var/www/Ц.Ы.Ф.Р.Ы/web/" is forbidden, client: МОЙ.ИП, server: _, request: "GET / HTTP/1.1", host: "Ц.Ы.Ф.Р.Ы"
2023/10/19 07:34:53 [error] 14570#14570: *7 directory index of "/var/www/Ц.Ы.Ф.Р.Ы/web/" is forbidden, client: 66.249.64.69, server: _, request: "GET / HTTP/1.1", host: "www.partsplug.com"
66.249.64.69 - не мой ИП
partsplug.com - вообще не знаю кто это
ls -la /var/www/Ц.Ы.Ф.Р.Ы/
иls -la /var/www/Ц.Ы.Ф.Р.Ы/web/
?кстати, если нет домена, то его можно прописать у себя в hosts:
Ц.Ы.Ф.Р.Ы mydomain.xyz
и поменять на сервере Ц.Ы.Ф.Р.Ы на mydomain.xyz
правда, с других компов будет недоступно, пока там тоже не пропишешь в hosts
total 78932
drwxr-xr-x 4 root root 4096 Oct 19 07:13 .
drwxr-xr-x 4 root root 4096 Oct 17 12:55 ..
-rw-r--r-- 1 root root 357 Oct 19 07:13 .editorconfig
-rw-r--r-- 1 root root 4034 Oct 19 07:13 .gitattributes
-rw-r--r-- 1 www-data www-data 5576 Oct 16 18:37 composer.json
-rw-r--r-- 1 www-data www-data 513600 Oct 16 18:37 composer.lock
drwxr-xr-x 53 www-data www-data 4096 Oct 19 07:13 vendor
drwxr-xr-x 9 www-data www-data 4096 Oct 19 14:36 web
и
total 96
drwxr-xr-x 9 www-data www-data 4096 Oct 19 14:36 .
drwxr-xr-x 4 root root 4096 Oct 19 07:13 ..
-rw-r--r-- 1 www-data www-data 1025 Oct 19 06:36 .csslintrc
-rw-r--r-- 1 www-data www-data 151 Oct 19 06:36 .eslintignore
-rw-r--r-- 1 www-data www-data 41 Oct 19 06:36 .eslintrc.json
-rw-r--r-- 1 www-data www-data 2467 Oct 19 06:36 .ht.router.php
-rw-r--r-- 1 www-data www-data 8024 Oct 19 06:36 .htaccess
-rw-r--r-- 1 www-data www-data 94 Oct 19 06:36 INSTALL.txt
-rw-r--r-- 1 www-data www-data 3205 Oct 19 06:36 README.md
-rw-r--r-- 1 www-data www-data 315 Oct 19 07:13 autoload.php
drwxr-xr-x 12 www-data www-data 4096 Oct 19 07:12 core
-rw-r--r-- 1 www-data www-data 1495 Oct 19 06:36 example.gitignore
-rwxrwxrwx 1 root root 612 Oct 17 12:16 index.nginx-debian.html
-rw-r--r-- 1 www-data www-data 549 Oct 19 06:36 index.php
drwxr-xr-x 8 www-data www-data 4096 Oct 19 07:13 libraries
drwxr-xr-x 3 www-data www-data 4096 Oct 19 07:13 modules
drwxr-xr-x 2 www-data www-data 4096 Sep 25 07:47 patches
drwxr-xr-x 2 www-data www-data 4096 Oct 19 07:13 profiles
-rw-r--r-- 1 www-data www-data 1706 Oct 19 06:36 robots.txt
drwxr-xr-x 3 www-data www-data 4096 Sep 12 10:55 sites
drwxr-xr-x 4 www-data www-data 4096 Oct 19 07:12 themes
-rw-r--r-- 1 www-data www-data 804 Oct 19 06:36 update.php
-rw-r--r-- 1 www-data www-data 4039 Oct 19 06:36 web.config
похоже, что дефолтный конфиг отрабатывает, попробуй его отключить:
rm /etc/nginx/sites-enabled/default
а в
fastcgi_pass
что?если установлен php8.2, то должно быть:
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
ну и перезагрузить nginx, само собой
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; - именно!
Спасибо!
Ставил сначала MySQL, мотом MariaDB - не устанаваливается.
Какието-то нюансы есть?
да вроде никаких:
sudo mysql_secure_installation #чтобы задать рутовый пароль
sudo apt install mariadbsudo apt install mariadb-server
Выполнил:
!>mysql_secure_installation
Change the root password? [Y/n] n
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y
=== При установке. ===
Database support
Disabled
Your web server does not appear to support any common PDO database extensions. Check with your hosting provider to see if they support PDO (PHP Data Objects) and offer any databases that Drupal supports.
https://www.drupal.org/docs/getting-started/system-requirements/database...
Что ему не хватает?
Этого: apt-get install php-mysql ?
php8.2-mysql
ну и до кучи, чтоб 2 раза не вставать: php8.2-common php8.2-gmp php8.2-curl php8.2-intl php8.2-mbstring php8.2-xmlrpc php8.2-gd php8.2-xml php8.2-zip
я только это ставил apt-get install php-mysql
оно вроде версию PHP само определило
До кучи - не ставил. Вроде не требует...
проверь после установки в отчете о состоянии - скорее всего, еще попросит расширений, gd и curl уж точно, ну контрибным модулям тоже может что-нибудь понадобиться, композер скажет
Наверное я это раньше ставил или оно поставилось с чем то в комплекте. Спасибо, 🤝🏼!
Итак я кое как настроил сервер имея root аккаунт. Как понимаю теперь надо в ОС сделать пользователя. А что дальше? В группу sudo этого пользователя добавлять? Если да то зачем он нужен еще один админ?