Настройка локальной среды разработки с nginx на Linux (ubuntu)

Вопрос или проблема

Недавно я перешёл на новый компьютер и скопировал все существующие git-репозитории для проектов веб-разработки со своего старого компьютера. На том старом компьютере я установил apache для обслуживания определённых папок в качестве подпапок моего домашнего каталога в качестве сайтов для разработки (либо статических, либо на PHP). Например, личный проект находился по адресу /home/myusername/programming/personal/projectname/.

Теперь на новом компьютере я попытался настроить nginx, чтобы использовать его похожим образом.

Я следовал этому руководству на DigitalOcean для установки nginx (и MySQL и PHP) на моем ноутбуке, работающем под управлением Linux Mint 18.1 (Serena).

Я настроил nginx следующим образом:

/etc/nginx/sites-available/default:

##
# Вы должны ознакомиться с следующими URL, чтобы получить хорошее понимание
# конфигурационных файлов Nginx, чтобы полностью раскрыть возможности Nginx.
# http://wiki.nginx.org/Pitfalls
# http://wiki.nginx.org/QuickStart
# http://wiki.nginx.org/Configuration
#
# Как правило, вы захотите переместить этот файл куда-то и начать с чистого
# файла, но оставить его для справки. Или просто отключить в sites-enabled.
#
# Пожалуйста, смотрите /usr/share/doc/nginx-doc/examples/ для более подробных примеров.
##

# Конфигурация сервера по умолчанию
#
server {
    listen 80 default_server;
    listen [::]:80 default_server;

    # Конфигурация SSL
    #
    # listen 443 ssl default_server;
    # listen [::]:443 ssl default_server;
    #
    # Примечание: вам следует отключить gzip для SSL-трафика.
    # См.: https://bugs.debian.org/773332
    #
    # Изучите ssl_ciphers, чтобы обеспечить безопасную конфигурацию.
    # См.: https://bugs.debian.org/765782
    #
    # Самоподписанные сертификаты, созданные пакетом ssl-cert
    # Не используйте их на производственном сервере!
    #
    # include snippets/snakeoil.conf;

    root /var/www/html;

    # Добавьте index.php в список, если вы используете PHP
    index index.php index.html index.htm index.nginx-debian.html;

    server_name _;

    location / {
        # Первоначально попытка обслуживать запрос как файл, затем
        # как каталог, затем вернуться к отображению 404.
        try_files $uri $uri/ =404;
    }

    # передача PHP-скриптов на сервер FastCGI, слушающий на 127.0.0.1:9000

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;

    #   # С php7.0-cgi:
    #   fastcgi_pass 127.0.0.1:9000;
    #   # С php7.0-fpm:
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
    }

    # запрещает доступ к файлам .htaccess, если корневая папка Apache
    # совпадает с папкой nginx
    #
    location ~ /\.ht {
        deny all;
    }
}


# Конфигурация виртуального хоста для example.com
#
# Вы можете переместить это в другой файл в sites-available/ и создать символьную ссылку
# на sites-enabled/ для его включения.
#
#server {
#   listen 80;
#   listen [::]:80;
#
#   server_name example.com;
#
#   root /var/www/example.com;
#   index index.html;
#
#   location / {
#       try_files $uri $uri/ =404;
#   }
#}

После этого тестирование путем создания /var/www/html/info.php (как показано в руководстве) прошло успешно.

Теперь я попытался добавить домен для одного из моих проектов.

/etc/nginx/sites-available/projectname.dev:

server {
    listen 80;
    listen [::]:80;

    server_name projectname.dev;

        root /home/myusername/programming/personal/projectname/;
        index index.php index.html;

        location / {
                # Первоначально попытка обслуживать запрос как файл, затем
                # как каталог, затем вернуться к отображению 404.
                try_files $uri $uri/ =404;
        }

        # передача PHP-скриптов на сервер FastCGI, слушающий на 127.0.0.1:9000

        location ~ \.php$ {
                include snippets/fastcgi-php.conf;

        #       # С php7.0-cgi:
        #       fastcgi_pass 127.0.0.1:9000;
        #       # С php7.0-fpm:
                fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        }

        # запрещает доступ к файлам .htaccess, если корневая папка Apache
        # совпадает с папкой nginx
        #
        location ~ /\.ht {
                deny all;
        }
}

(Я также добавил символьную ссылку из sites-enabled на это: ln -s /etc/nginx/sites-available/projectname.dev /etc/nginx/sites-enabled/projectname.dev).

После перезапуска nginx (sudo service nginx restart) и добавления 127.0.0.1 projectname.dev в мой файл /etc/hosts, я получил ошибку 404.

Просматривая /var/log/nginx/error.log, я узнал, что мои запросы не выполняются по следующей причине:

2017/04/17 21:38:11 [crit] 30176#30176: *3 stat() "/home/myusername/programming/personal/projectname/" failed (13: Permission denied), client: 127.0.0.1, server: projectname.dev, request: "GET / HTTP/1.1", host: "projectname.dev"

Я предполагаю, что это связано с управлением правами доступа к файлам/каталогам в linux/unix. Мой домашний каталог, очевидно, принадлежит myusername, в то время как nginx запускается пользователем www-data. Однако я не уверен, как изменить права этой папки, чтобы www-data/nginx смогли получить к ней доступ (и к файлам внутри).

Как это можно решить? И почему я не столкнулся с этой проблемой, настраивая Apache на моем предыдущем компьютере (также работающем на Linux Mint)?

Я никогда не использовал nginx, но, следуя вашему совету, который мне кажется правильным, я изменю права доступа соответствующих файлов/папок, изменив групповой владелец на www-data и проверив, чтобы файлы имели как минимум 0644, а папки как минимум 0755 разрешения.

Если вам нужно, чтобы ваше веб-приложение записывало в некоторые файлы или каталоги, либо вы меняете владельца этих файлов/каталогов на www-data, либо добавляете разрешение на запись для группы (0664 для файлов и 0775 для папок).

Ответ или решение

Настройка локальной среды разработки с Nginx на Linux (Ubuntu)

Настройка локальной среды разработки с использованием Nginx на Linux может быть немного сложной, особенно после перехода с Apache, так как конфигурации и права доступа могут различаться. При переходе к Nginx, вы уже выполнили множество действий, таких как установка сервера и создание конфигурационных файлов. Однако, вам требуется решить вопрос с правами доступа, чтобы Nginx мог корректно обслуживать ваши проекты.

1. Проверка и настройка конфигурации Nginx

Ваш файл конфигурации для проекта выглядит в целом правильно, но есть несколько моментов, которые следует проверить:

  • Убедитесь, что вы правильно указали путь к папке, которая содержит ваши файлы приложения.
  • Проверьте, правильно ли назначены все ключевые директивы, такие как root и index.

2. Настройка прав доступа

Как вы уже заметили, проблема, с которой вы столкнулись, заключается в недоступности вашего каталога для пользователя www-data, который используется Nginx. Чтобы разрешить Nginx доступ к вашему проекту, вы можете выполнить следующие шаги:

  1. Измените группу каталога вашего проекта:

    Используйте команду chown, чтобы изменить группу владельца на www-data.

    sudo chown -R myusername:www-data /home/myusername/programming/personal/projectname/

    Это назначит группу www-data всем файлам и папкам в каталоге вашего проекта.

  2. Настройте права доступа:

    Убедитесь, что у всех каталогов установлены права не менее 0755, а у файлов — 0644. Вы можете сделать это, выполнив команды:

    find /home/myusername/programming/personal/projectname/ -type d -exec chmod 755 {} \;
    find /home/myusername/programming/personal/projectname/ -type f -exec chmod 644 {} \;

    Если вашему веб-приложению нужно записывать данные в определенные файлы или каталоги, вы можете предоставить дополнительные разрешения:

    sudo chmod -R 775 /home/myusername/programming/personal/projectname/writable-directory

    Здесь writable-directory — это папка, в которую ваше приложение должно иметь возможность записывать данные.

  3. Проверьте конфигурацию hosts:

    Убедитесь, что вы правильно добавили строку:

    127.0.0.1 projectname.dev

    в файл /etc/hosts. Это необходимо для того, чтобы ваш компьютер мог корректно разрешать имя домена в IP-адрес.

3. Перезапуск Nginx

Не забудьте перезапустить Nginx после внесения изменений:

sudo service nginx restart

4. Проверка журналов

Если вы все еще сталкиваетесь с проблемами доступа, проверьте журналы Nginx:

tail -f /var/log/nginx/error.log

Проверка этих журналов даст вам более детальную информацию о том, что происходит. Это может помочь идентифицировать другие потенциальные проблемы, которые могут возникнуть.

Заключение

При переходе на Nginx с Apache важно помнить о различиях в управлении правами доступа и конфигурации. Понимание этих различий и корректная настройка прав доступа помогут вам успешно настроить локальную среду разработки. Следуя вышеописанным шагам, вы сможете исправить ошибки доступа и продолжить работу над своим проектом с использованием Nginx на Ubuntu или любом другом дистрибутиве Linux.

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

Капча загружается...