Вопрос или проблема
Я новичок в Linux и Nginx. Я использую Nginx 1.24.0 на Ubuntu 24.04 LTS. По умолчанию Nginx создает виртуальный хост в /var/www/html
и правильно обслуживает файлы, когда я создаю там виртуальные хосты. Однако я пытаюсь обслуживать виртуальный хост и постоянно получаю ошибку 403 Forbidden.
Вот настройки и детали:
-
Конфигурация виртуального хоста:
server { listen 80; listen [::]:80; root /home/amyr/Desktop/Sites/telbot/public; index index.html index.htm index.nginx-debian.html index.php; server_name telegrambot www.telegrambot; # location / { # try_files $uri $uri/ =404; # } }
-
Файл hosts:
127.0.0.1 localhost 127.0.1.1 Amyr-Linux 127.0.0.1 telegrambot 127.0.0.1 www.telegrambot 127.0.0.1 example.ubuntu.com # Следующие строки желательны для хостов, поддерживающих IPv6 ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters
-
Права доступа к папкам:
drwxrwxrwx 3 root root 4096 Sep 24 19:08 Sites drwxrwxrwx 12 root root 4096 Sep 24 19:13 telbot drwxrwxrwx 2 root root 4096 Sep 24 19:28 public -rwxrwxrwx 1 amyr amyr 103 Sep 24 19:22 index.html
-
Статус Nginx:
● nginx.service - Высокопроизводительный веб-сервер и сервер обратного прокси Загрузка: загружен (/usr/lib/systemd/system/nginx.service; включен; предустановлено: включен) Активно: активно (работает) с Вт 2024-09-24 20:15:58 +0330; 7мин назад
nginx: конфигурационный файл /etc/nginx/nginx.conf синтаксически верен
nginx: тест конфигурационного файла /etc/nginx/nginx.conf успешен
# конфигурационный файл /etc/nginx/nginx.conf:
user www-data;
worker_processes auto;
pid /run/nginx.pid;
error_log /var/log/nginx/error.log;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Основные настройки
##
sendfile on;
tcp_nopush on;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL-настройки
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Отказ от SSLv3, см. POODLE
ssl_prefer_server_ciphers on;
##
# Настройки логирования
##
access_log /var/log/nginx/access.log;
##
# Настройки Gzip
##
gzip on;
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
##
# Конфигурации виртуальных хостов
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
#mail {
# # См. образец сценария аутентификации на:
# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
# # auth_http localhost/auth.php;
# # pop3_capabilities "TOP" "USER";
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
# server {
# listen localhost:110;
# protocol pop3;
# proxy on;
# }
#
# server {
# listen localhost:143;
# protocol imap;
# proxy on;
# }
#}
# конфигурационный файл /etc/nginx/mime.types:
types {
text/html html htm shtml;
text/css css;
text/xml xml;
image/gif gif;
image/jpeg jpeg jpg;
application/javascript js;
application/atom+xml atom;
application/rss+xml rss;
text/mathml mml;
text/plain txt;
text/vnd.sun.j2me.app-descriptor jad;
text/vnd.wap.wml wml;
text/x-component htc;
image/avif avif;
image/png png;
image/svg+xml svg svgz;
image/tiff tif tiff;
image/vnd.wap.wbmp wbmp;
image/webp webp;
image/x-icon ico;
image/x-jng jng;
image/x-ms-bmp bmp;
font/woff woff;
font/woff2 woff2;
application/java-archive jar war ear;
application/json json;
application/mac-binhex40 hqx;
application/msword doc;
application/pdf pdf;
application/postscript ps eps ai;
application/rtf rtf;
application/vnd.apple.mpegurl m3u8;
application/vnd.google-earth.kml+xml kml;
application/vnd.google-earth.kmz kmz;
application/vnd.ms-excel xls;
application/vnd.ms-fontobject eot;
application/vnd.ms-powerpoint ppt;
application/vnd.oasis.opendocument.graphics odg;
application/vnd.oasis.opendocument.presentation odp;
application/vnd.oasis.opendocument.spreadsheet ods;
application/vnd.oasis.opendocument.text odt;
application/vnd.openxmlformats-officedocument.presentationml.presentation
pptx;
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
xlsx;
application/vnd.openxmlformats-officedocument.wordprocessingml.document
docx;
application/vnd.wap.wmlc wmlc;
application/wasm wasm;
application/x-7z-compressed 7z;
application/x-cocoa cco;
application/x-java-archive-diff jardiff;
application/x-java-jnlp-file jnlp;
application/x-makeself run;
application/x-perl pl pm;
application/x-pilot prc pdb;
application/x-rar-compressed rar;
application/x-redhat-package-manager rpm;
application/x-sea sea;
application/x-shockwave-flash swf;
application/x-stuffit sit;
application/x-tcl tcl tk;
application/x-x509-ca-cert der pem crt;
application/x-xpinstall xpi;
application/xhtml+xml xhtml;
application/xspf+xml xspf;
application/zip zip;
application/octet-stream bin exe dll;
application/octet-stream deb;
application/octet-stream dmg;
application/octet-stream iso img;
application/octet-stream msi msp msm;
audio/midi mid midi kar;
audio/mpeg mp3;
audio/ogg ogg;
audio/x-m4a m4a;
audio/x-realaudio ra;
video/3gpp 3gpp 3gp;
video/mp2t ts;
video/mp4 mp4;
video/mpeg mpeg mpg;
video/ogg ogv;
video/quicktime mov;
video/webm webm;
video/x-flv flv;
video/x-m4v m4v;
video/x-matroska mkv;
video/x-mng mng;
video/x-ms-asf asx asf;
video/x-ms-wmv wmv;
video/x-msvideo avi;
}
# конфигурационный файл /etc/nginx/sites-enabled/default:
##
# Вам следует посмотреть на следующие URL, чтобы получить полное понимание
# конфигурационных файлов Nginx и полностью использовать возможности Nginx.
# https://www.nginx.com/resources/wiki/start/
# https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
# https://wiki.debian.org/Nginx/DirectoryStructure
#
# В большинстве случаев администраторы удаляют этот файл из sites-enabled/ и
# оставляют его в качестве справочного в sites-available, где он будет продолжать
# обновляться командой упаковки nginx.
#
# Этот файл автоматически загрузит конфигурационные файлы, предоставленные другими
# приложениями, такими как Drupal или WordPress. Эти приложения будут доступны
# под путем с именем этого пакета, таким как /drupal8.
#
# Пожалуйста, смотрите /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.html index.htm index.nginx-debian.html;
server_name _;
location / {
# Сначала попытайтесь обслужить запрос как файл, затем
# как директорию, затем вернуться к отображению 404.
try_files $uri $uri/ =404;
}
# передать PHP-скрипты на сервер FastCGI
#
#location ~ \.php$ {
# include snippets/fastcgi-php.conf;
#
# # С php-fpm (или другими unix-сокетами):
# fastcgi_pass unix:/run/php/php7.4-fpm.sock;
# # С php-cgi (или другими tcp-сокетами):
# fastcgi_pass 127.0.0.1:9000;
#}
# запретить доступ к .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;
# }
#}
# конфигурационный файл /etc/nginx/sites-enabled/telegrambot:
server {
listen 81;
listen [::]:81;
server_name telegrambot.test www.telegrambot.test;
root /var/www/telegrambot/public;
index index.html index.htm index.php index.nginx-debian.html;
location / {
try_files $uri $uri/ =404;
}
}
# конфигурационный файл /etc/nginx/sites-enabled/tutorial:
server {
listen 81;
listen [::]:81;
server_name example.ubuntu.com;
root /var/www/tutorial;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
Файлы в /var/www/html
работают нормально, но когда я пытаюсь обслужить из /home/amyr/Desktop/Sites/telbot/public
или из любых других мест, которые я создал, я получаю ошибку 403 Forbidden.
Ваша конфигурация указывает, что telegrambot
на порту 82. Вы можете получить к нему доступ по http://telegrambot:82
. Либо вам нужно изменить директиву listen
на порт 80.
Это было не из-за порта. Я переместил папку в директорию /var/www, и теперь все в порядке. Однако есть одна проблема: я только что установил новое приложение Laravel (PHP-фреймворк) в свою папку в /var/www/telegrambot и создал виртуальный хост (telegrambot.test:81) для этой папки (путь = /var/www/telegrambot/public). Теперь я хочу, чтобы Nginx открыл мой файл index.php (который находится в моей публичной папке). Но он пытается его скачать. Изображение здесь
Моя конфигурация:
server {
listen 81;
listen [::]:81;
server_name telegrambot.test www.telegrambot.test;
root /var/www/telegrambot/public;
index index.html index.htm index.php index.nginx-debian.html;
location / {
try_files $uri $uri/ =404;
}
}
А вот вывод моего nginx -T:
nginx: конфигурационный файл /etc/nginx/nginx.conf синтаксически верен
nginx: тест конфигурационного файла /etc/nginx/nginx.conf успешен
# конфигурационный файл /etc/nginx/nginx.conf:
user www-data;
worker_processes auto;
pid /run/nginx.pid;
error_log /var/log/nginx/error.log;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Основные настройки
##
sendfile on;
tcp_nopush on;
types_hash_max_size 2048;
# server_tokens off;
server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL-настройки
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Отказ от SSLv3, см. POODLE
ssl_prefer_server_ciphers on;
##
# Настройки логирования
##
access_log /var/log/nginx/access.log;
##
# Настройки Gzip
##
gzip on;
# gzip_vary on;
# gzip_proxied any;
# gzip_comp_level 6;
# gzip_buffers 16 8k;
# gzip_http_version 1.1;
# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
##
# Конфигурации виртуальных хостов
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
#mail {
# # См. образец сценария аутентификации на:
# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
# # auth_http localhost/auth.php;
# # pop3_capabilities "TOP" "USER";
# # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
# server {
# listen localhost:110;
# protocol pop3;
# proxy on;
# }
#
# server {
# listen localhost:143;
# protocol imap;
# proxy on;
# }
#}
# конфигурационный файл /etc/nginx/mime.types:
types {
text/html html htm shtml;
text/css css;
text/xml xml;
image/gif gif;
image/jpeg jpeg jpg;
application/javascript js;
application/atom+xml atom;
application/rss+xml rss;
text/mathml mml;
text/plain txt;
text/vnd.sun.j2me.app-descriptor jad;
text/vnd.wap.wml wml;
text/x-component htc;
image/avif avif;
image/png png;
image/svg+xml svg svgz;
image/tiff tif tiff;
image/vnd.wap.wbmp wbmp;
image/webp webp;
image/x-icon ico;
image/x-jng jng;
image/x-ms-bmp bmp;
font/woff woff;
font/woff2 woff2;
application/java-archive jar war ear;
application/json json;
application/mac-binhex40 hqx;
application/msword doc;
application/pdf pdf;
application/postscript ps eps ai;
application/rtf rtf;
application/vnd.apple.mpegurl m3u8;
application/vnd.google-earth.kml+xml kml;
application/vnd.google-earth.kmz kmz;
application/vnd.ms-excel xls;
application/vnd.ms-fontobject eot;
application/vnd.ms-powerpoint ppt;
application/vnd.oasis.opendocument.graphics odg;
application/vnd.oasis.opendocument.presentation odp;
application/vnd.oasis.opendocument.spreadsheet ods;
application/vnd.oasis.opendocument.text odt;
application/vnd.openxmlformats-officedocument.presentationml.presentation
pptx;
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
xlsx;
application/vnd.openxmlformats-officedocument.wordprocessingml.document
docx;
application/vnd.wap.wmlc wmlc;
application/wasm wasm;
application/x-7z-compressed 7z;
application/x-cocoa cco;
application/x-java-archive-diff jardiff;
application/x-java-jnlp-file jnlp;
application/x-makeself run;
application/x-perl pl pm;
application/x-pilot prc pdb;
application/x-rar-compressed rar;
application/x-redhat-package-manager rpm;
application/x-sea sea;
application/x-shockwave-flash swf;
application/x-stuffit sit;
application/x-tcl tcl tk;
application/x-x509-ca-cert der pem crt;
application/x-xpinstall xpi;
application/xhtml+xml xhtml;
application/xspf+xml xspf;
application/zip zip;
application/octet-stream bin exe dll;
application/octet-stream deb;
application/octet-stream dmg;
application/octet-stream iso img;
application/octet-stream msi msp msm;
audio/midi mid midi kar;
audio/mpeg mp3;
audio/ogg ogg;
audio/x-m4a m4a;
audio/x-realaudio ra;
video/3gpp 3gpp 3gp;
video/mp2t ts;
video/mp4 mp4;
video/mpeg mpeg mpg;
video/ogg ogv;
video/quicktime mov;
video/webm webm;
video/x-flv flv;
video/x-m4v m4v;
video/x-matroska mkv;
video/x-mng mng;
video/x-ms-asf asx asf;
video/x-ms-wmv wmv;
video/x-msvideo avi;
}
# конфигурационный файл /etc/nginx/sites-enabled/default:
##
# Вам следует посмотреть на следующие URL, чтобы получить полное понимание
# конфигурационных файлов Nginx и полностью использовать возможности Nginx.
# https://www.nginx.com/resources/wiki/start/
# https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
# https://wiki.debian.org/Nginx/DirectoryStructure
#
# В большинстве случаев администраторы удаляют этот файл из sites-enabled/ и
# оставляют его в качестве справочного в sites-available, где он будет продолжать
# обновляться командой упаковки nginx.
#
# Этот файл автоматически загрузит конфигурационные файлы, предоставленные другими
# приложениями, такими как Drupal или WordPress. Эти приложения будут доступны
# под путем с именем этого пакета, таким как /drupal8.
#
# Пожалуйста, смотрите /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.html index.htm index.nginx-debian.html;
server_name _;
location / {
# Сначала попытайтесь обслужить запрос как файл, затем
# как директорию, затем вернуться к отображению 404.
try_files $uri $uri/ =404;
}
# передать PHP-скрипты на сервер FastCGI
#
#location ~ \.php$ {
# include snippets/fastcgi-php.conf;
#
# # С php-fpm (или другими unix-сокетами):
# fastcgi_pass unix:/run/php/php7.4-fpm.sock;
# # С php-cgi (или другими tcp-сокетами):
# fastcgi_pass 127.0.0.1:9000;
#}
# запретить доступ к .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;
# }
#}
# конфигурационный файл /etc/nginx/sites-enabled/telegrambot:
server {
listen 81;
listen [::]:81;
server_name telegrambot.test www.telegrambot.test;
root /var/www/telegrambot/public;
index index.html index.htm index.php index.nginx-debian.html;
location / {
try_files $uri $uri/ =404;
}
}
# конфигурационный файл /etc/nginx/sites-enabled/tutorial:
server {
listen 81;
listen [::]:81;
server_name example.ubuntu.com;
root /var/www/tutorial;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
Я спросил у ИИ, и он посоветовал мне использовать пакет “php-fpm” и изменить мою конфигурацию на приведенную ниже версию:
server {
listen 81;
listen [::]:81;
server_name telegrambot.test www.telegrambot.test;
root /var/www/telegrambot/public;
index index.html index.htm index.php index.nginx-debian.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# Передать PHP-скрипты на сервер FastCGI
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # Настройте версию PHP, если необходимо
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
Можно ли использовать этот пакет или есть другие решения?
Ответ или решение
403 Forbidden ошибка в Nginx на Ubuntu 24.04 LTS может возникать по нескольким причинам, особенно когда вы работаете с файлами, расположенными в нестандартных директориях, таких как /home/user/...
. Давайте разберем основные моменты, которые могут помочь вам решить эту проблему.
Причины и решения для ошибки 403 Forbidden
-
Права доступа к директориям:
- Убедитесь, что директория и файлы, которые вы пытаетесь обслуживать, имеют правильные права доступа. Для Nginx права доступа к директориям должны быть не менее
755
, а к файлам –644
. Чтобы изменить права, выполните следующие команды:sudo chmod -R 755 /home/amyr/Desktop/Sites/telbot sudo chmod -R 644 /home/amyr/Desktop/Sites/telbot/public/*
- Убедитесь, что директория и файлы, которые вы пытаетесь обслуживать, имеют правильные права доступа. Для Nginx права доступа к директориям должны быть не менее
-
Пользователь Nginx:
- Nginx обычно запускается от имени пользователя
www-data
. Убедитесь, что этот пользователь имеет доступ к нужным директориям. Вы можете изменить владельца директории наwww-data
, используя:sudo chown -R www-data:www-data /home/amyr/Desktop/Sites/telbot
- Однако рекомендуется перемещать ваши файлы в стандартные директории, такие как
/var/www
, где Nginx уже имеет необходимые права доступа.
- Nginx обычно запускается от имени пользователя
-
Конфигурация Nginx:
-
Убедитесь, что вашей конфигурации Nginx соответствует вашему приложению. На основании того, что вы указали, вы попробовали запустить Laravel. Чтобы корректно обрабатывать PHP-файлы, внесите изменения в конфигурацию, как показано ниже:
server { listen 81; server_name telegrambot.test www.telegrambot.test; root /var/www/telegrambot/public; index index.php index.html index.htm index.nginx-debian.html; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { include snippets/fastcgi-php.conf; # Этот файл должен содержать настройку для FastCGI. fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # Убедитесь, что версия PHP совпадает с установленной. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.ht { deny all; } }
-
Обратите внимание на строку
try_files $uri $uri/ /index.php?$query_string;
, которая позволяет Nginx передавать запросы кindex.php
, если файл не найден.
-
-
Проверка PHP-FPM:
- Убедитесь, что PHP-FPM установлен и работает корректно. Вы можете проверить статус PHP-FPM командой:
sudo systemctl status php8.1-fpm
- Если необходимо, перезапустите службу PHP-FPM:
sudo systemctl restart php8.1-fpm
- Убедитесь, что PHP-FPM установлен и работает корректно. Вы можете проверить статус PHP-FPM командой:
Проверка конфигурации Nginx
После всех изменений проверьте конфигурацию Nginx на ошибки и перезапустите сервер:
sudo nginx -t
sudo systemctl restart nginx
Заключение
Определение причины ошибки 403 Forbidden может быть сложной задачей, но, следуя приведенным выше шагам, вы сможете решить проблему. Обязательно убедитесь, что права доступа установлены правильно, конфигурация Nginx настроена для обработки PHP, а PHP-FPM работает без ошибок. Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться за помощью.