Взял сервер. Сайта выдает: 403 Forbidden nginx/1.18.0 (Ubuntu).

Главные вкладки

Аватар пользователя VasyOK VasyOK 19 октября 2023 в 16:23

Всем привет.
Сайт уставновленный композером на свежий сервер выдает:
403 Forbidden nginx/1.18.0 (Ubuntu).

До этого в папке web лежал index.nginx-debian.html, так что приветственная информация при заходе на сайт выдавалась.

Права и владельца в папке сайта менял:

chown -R root:root *
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
cd web/sites/default/files/
find . -type d -exec chmod 777 {} \;
find . -type f -exec chmod 777 {} \;

Комментарии

Аватар пользователя VasyOK VasyOK 19 октября 2023 в 18:34

конфиг вирт.хоста nginx
/etc/nginx/sites-available/default:

server {
        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;

Аватар пользователя Andruxa Andruxa 19 октября 2023 в 21:03

не-не-не
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 d -exec chmod 755 {} \;
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 d -exec chmod 775 {} \;
find /var/www/domain.name/web/sites/default/files/-type f -exec chmod 664 {} \;
Аватар пользователя ant4 ant4 19 октября 2023 в 17:25

Drupal из коробки заточен под Apache.
NGINX надо настраивать.
В документации это написано.

PS. там же написано про /sites/default/files:
Security note: Universal permission like 0777 is not secure and usage of such is discouraged.

Аватар пользователя cwpnaWLs7M4a cwpnaWLs7M4a 19 октября 2023 в 18:03

1. я про nginx не силен. апач работает через пользователя www-data. посмотрите через какого пользователя работает nginx .
2. на сайте nginx есть специальный конфиг для друпал.
3. на nginx надо включать поддержку .htaccess
4. у вас VDS или шаред хостинг? проще работать с шаред у которого есть ssh и совместим с друпал(композером).

Аватар пользователя VasyOK VasyOK 19 октября 2023 в 19:55

1. от какого пользователя?

$ ps aux | grep nginx
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
Я ж думал что запрет отсутствует, раз закоментировано:

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #       deny all;
        #}

Или где-то еще надо прописать?

Аватар пользователя cwpnaWLs7M4a cwpnaWLs7M4a 19 октября 2023 в 20:15

1. надо chown -R www-data:www-data * делать
2,3. не надо мучится. ставьте апачи+php-fpm . и все будет работать на большой скорости. то что народ пишет про тормоза это про апачи+php mod .

Аватар пользователя VasyOK VasyOK 19 октября 2023 в 20:27

Я готов мучаться. Только ссылку на документацию мне бы внятную. Так что с этим конфиг файлом делать?

Аватар пользователя bsyomov bsyomov 25 октября 2023 в 17:14

Конечно нет, надо создать новый конфиг из этого шаблона, заменив там часть данных, например домен и путь до webroot.

Аватар пользователя bsyomov bsyomov 25 октября 2023 в 17:16

Аpache + mod_php быстрее чем apache + php-fpm, на самом деле. Apache не ставят не из-за скорости обработки отдельных запросов, а из-за ресурсоёмкости излишней на каждый запрос, даже к статике.

Аватар пользователя VasyOK VasyOK 19 октября 2023 в 22:15

Давайте еще раз. Для начала я хочу завести это под рутом, чтоб убедиться что оно вообще работает а потом уже создавать пользователя.

Итак хостинг выдал мне сервер, реального домена пока нет, поэтому Ц.Ы.Ф.Р.Ы
Код отсюда
https://www.nginx.com/resources/wiki/start/topics/recipes/drupal/
Положил сюда:
/etc/nginx/sites-available/Ц.Ы.Ф.Р.Ы.conf
Изменил в коде только:

server {
    server_name Ц.Ы.Ф.Р.Ы;
    root /var/www/Ц.Ы.Ф.Р.Ы/web;

Выполнил
ln -s /etc/nginx/sites-available/Ц.Ы.Ф.Р.Ы.conf /etc/nginx/sites-enabled/

Выставил группу

cd /var/www/Ц.Ы.Ф.Р.Ы/
chown -R www-data:www-data *

Поставил права:

find /var/www/Ц.Ы.Ф.Р.Ы/ -type d -exec chmod 755 {} \;
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)

Что-то забыл?

Аватар пользователя VasyOK VasyOK 19 октября 2023 в 22:29
$ php -v
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
$ systemctl status
● 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
Аватар пользователя cwpnaWLs7M4a cwpnaWLs7M4a 19 октября 2023 в 22:33

вроде все нормально. я тестирую так. создаю простенький файл phpinfo.php в каталоге сайта

<?php
phpinfo
();
?>

и вызываю его. localhost/phpinfo.php для теста.

Аватар пользователя VasyOK VasyOK 20 октября 2023 в 1:32

в /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 - вообще не знаю кто это

Аватар пользователя Andruxa Andruxa 20 октября 2023 в 2:36

кстати, если нет домена, то его можно прописать у себя в hosts:
Ц.Ы.Ф.Р.Ы  mydomain.xyz
и поменять на сервере Ц.Ы.Ф.Р.Ы на mydomain.xyz
правда, с других компов будет недоступно, пока там тоже не пропишешь в hosts

Аватар пользователя VasyOK VasyOK 20 октября 2023 в 2:43
root@vmi1481536:~# ls -la /var/www/Ц.Ы.Ф.Р.Ы/
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

и

root@vmi1481536:~# ls -la /var/www/Ц.Ы.Ф.Р.Ы/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
Аватар пользователя Andruxa Andruxa 20 октября 2023 в 3:12

похоже, что дефолтный конфиг отрабатывает, попробуй его отключить:
rm /etc/nginx/sites-enabled/default

Изменил в коде только:

server {
    server_name Ц.Ы.Ф.Р.Ы;
    root /var/www/Ц.Ы.Ф.Р.Ы/web;

а в fastcgi_pass что?
если установлен php8.2, то должно быть: fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
ну и перезагрузить nginx, само собой

Аватар пользователя VasyOK VasyOK 20 октября 2023 в 9:21

fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; - именно!
Спасибо!

Ставил сначала MySQL, мотом MariaDB - не устанаваливается.

Какието-то нюансы есть?

Аватар пользователя VasyOK VasyOK 21 октября 2023 в 23:09

Выполнил:

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 ?

Аватар пользователя Andruxa Andruxa 22 октября 2023 в 0:27

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

Аватар пользователя VasyOK VasyOK 22 октября 2023 в 0:29

я только это ставил apt-get install php-mysql
оно вроде версию PHP само определило
До кучи - не ставил. Вроде не требует...

Аватар пользователя Andruxa Andruxa 22 октября 2023 в 0:59

проверь после установки в отчете о состоянии - скорее всего, еще попросит расширений, gd и curl уж точно, ну контрибным модулям тоже может что-нибудь понадобиться, композер скажет

Аватар пользователя VasyOK VasyOK 20 ноября 2023 в 15:19

Итак я кое как настроил сервер имея root аккаунт. Как понимаю теперь надо в ОС сделать пользователя. А что дальше? В группу sudo этого пользователя добавлять? Если да то зачем он нужен еще один админ?