Mam 3 nazwy domen i próbuję hostować wszystkie 3 witryny na jednym serwerze (kropla Digital Ocean) przy użyciu Nginx.
mysite1.name mysite2.name mysite3.name
Tylko 1 z nich działa. Pozostałe dwa powodują błędy 403 (w ten sam sposób).
Nginx w moim dzienniku błędów, widzę: [error] 13108#0: *1 directory index of "/usr/share/nginx/mysite2.name/live/" is forbidden
.
Moja konfiguracja obsługująca witryny to:
server {
server_name www.mysite2.name;
return 301 $scheme://mysite2.name$request_uri;
}
server {
server_name mysite2.name;
root /usr/share/nginx/mysite2.name/live/;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.html index.php;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
Wszystkie 3 witryny mają prawie identyczne pliki konfiguracyjne.
Pliki każdej witryny znajdują się w folderach takich jak /usr/share/nginx/mysite1.name/someFolder, a następnie /usr/share/nginx/mysite1.name/live to symlink do tego. (To samo dla mysite2 i mysite3.)
Patrzyłem na Nginx 403 zabroniony dla wszystkich plików, ale to nie pomogło.
Wszelkie pomysły na to, co może być nie tak?
index.html
index.php
brakuje Ci plików, czy upewniłeś się, że istnieją w tym folderze?root
na/Users/myUsername/code/app
zamiast/Users/myUsername/code/app/public
.Odpowiedzi:
Jeśli masz wyłączone indeksowanie katalogów i masz ten problem, to prawdopodobnie dlatego, że używane pliki try_ mają opcję katalogu:
Usuń go i powinno działać:
Dlaczego tak się dzieje
TL; DR: Jest to spowodowane tym, że nginx spróbuje zaindeksować katalog i sam zostanie zablokowany. Zgłoszenie błędu wspomnianego przez OP.
try_files $uri $uri/
oznacza, że z katalogu głównego wypróbuj plik wskazany przezuri
, jeśli nie istnieje, spróbuj zamiast tego katalogu (stąd/
). Gdy nginx uzyskuje dostęp do katalogu, próbuje go zindeksować i zwrócić listę plików w nim do przeglądarki / klienta, jednak domyślnie indeksowanie katalogu jest wyłączone, więc zwraca błąd „Błąd Nginx 403: indeks katalogu [folder] jest zabronione".Indeksowanie katalogów jest kontrolowane przez
autoindex
opcję: https://nginx.org/en/docs/http/ngx_http_autoindex_module.htmlźródło
try_files
nie próbowałemindex.php
, po prostu ciągle otrzymywałem 403 z „indeksem katalogu ... jest zabronione”$uri/
stwarza problem?try_files $uri $uri/
oznacza, z katalogu głównego, wypróbowanie pliku wskazanego przez URI, jeśli to nie istnieje, spróbuj zamiast tego katalogu (stąd/
). Gdy nginx uzyskuje dostęp do katalogu, próbuje go zindeksować i zwrócić listę plików w nim do przeglądarki / klienta, jednak domyślnie indeksowanie katalogu jest wyłączone, więc zwraca błąd „Błąd Nginx 403: indeks katalogu [folder] jest zabronione". Indeksowanie katalogów jest kontrolowane przezautoindex
opcję: nginx.org/en/docs/http/ngx_http_autoindex_module.htmlOto konfiguracja, która działa:
Wtedy jedynym wyjściem w przeglądarce był błąd Laravela: „Ups, wygląda na to, że coś poszło nie tak”.
NIE uruchamiaj
chmod -R 777 app/storage
( uwaga ). Robienie czegoś, co można zapisać na całym świecie, jest złym zabezpieczeniem.chmod -R 755 app/storage
działa i jest bardziej bezpieczny.źródło
www-data
Na Debianie. Następnie ustaw jeszcze bardziej rygorystyczne uprawnienia do folderu, takie jak:chmod -R 640 app/storage
następniechown -R :www-data app/storage
. W ten sposób pliki są widoczne tylko dla właściciela aplikacji i serwera WWW. I nikt nie może bezpośrednio wykonać żadnego z zapisanych (prawdopodobnie przesłanych) plików. Nginx powinien mieć tylko uprawnienia do odczytu, aby uzyskać dostęp do plików.public/
naroot /usr/share/nginx/mysitename/public/;
. Po dodaniupublic/
i uruchomieniuservice nginx restart
działało.Jeśli po prostu próbujesz wyświetlić zawartość katalogu, użyj
autoindex on;
:źródło
autoindex on
; kiepskim pomysłem byłoby ujawnienie mojej zawartości katalogu publicznie.Na
stronie internetowej wystąpił podobny błąd --- „403 Forbidden”
--- „13: Odmowa uprawnień” w dzienniku błędów na stronie /var/log/nginx/error.log
Poniżej 3 kroki działały dla mnie:
1: Otwórz terminal, zobaczyłem coś jak poniżej
Moja nazwa użytkownika to „użytkownik1” (z góry)
2: Zmieniono użytkownika w /etc/nginx/nginx.conf
3: Załadowano ponownie nginx
Dodatkowo zastosowałem uprawnienia do plików / folderów (zanim zrobiłem powyżej 3 kroków)
(755 do mojego katalogu, powiedz / dir1 /) i (644 dla plików w tym katalogu):
(Nie jestem pewien, czy ten dodatkowy krok jest naprawdę wymagane, nieco powyżej 3 kroków może wystarczyć):
Mam nadzieję, że to pomoże komuś szybko. Powodzenia.
źródło
W rzeczywistości jest kilka rzeczy, które musisz sprawdzić. 1. sprawdź status działania twojego nginx
Tutaj musimy sprawdzić, kto obsługuje nginx. pamiętaj o użytkowniku i grupie
sprawdź status dostępu do folderu
ls -alt
porównaj ze statusem folderu ze statusem nginx
(1) jeśli status dostępu do folderu jest nieprawidłowy
(2) jeśli użytkownik i grupa folderu nie są takie same jak działające nginx
i zmień działającą nazwę użytkownika i grupę nginx
znaleźć plik konfiguracyjny nginx
Ponieważ domyślnym użytkownikiem nginx jest użytkownik, a grupa to nikt. jeśli nie zauważymy tego użytkownika i grupy, zostanie wprowadzonych 403.
źródło
Miałem ten sam problem, plik dziennika pokazał mi ten błąd:
Hostuję aplikację PHP z frameworkiem Codeignitor. Kiedy chciałem wyświetlić przesłane pliki, otrzymałem
403 Error
.Problem polegał na tym, że
nginx.conf
nie został poprawnie zdefiniowany. Zamiasttylko zawarłem
Mam plik index.php w katalogu głównym i myślałem, że to wystarczy, myliłem się;) Podpowiedź dała mi NginxLibrary
źródło
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
index index.html index.htm index.php;
Możesz dostać to z powodu polityki Nginx (np. „Odmowa”) lub możesz dostać to z powodu błędnej konfiguracji Nginx, lub możesz dostać to z powodu ograniczeń systemu plików.
Możesz ustalić, czy jest to później (i ewentualnie zobaczyć dowody błędnej konfiguracji za pomocą strace (z wyjątkiem, że OP nie będzie miał do tego dostępu):
Tutaj sprawdzam aktywność systemu plików wykonaną przez nginx podczas uruchomienia testu (miałem taki sam błąd jak ty).
Oto wybrana część mojej konfiguracji w tym czasie
W moim przypadku, jak pokazuje dość wyraźnie strace, dołączenie „aliasu” do „indeksu” nie było tym, czego się spodziewałem, i wydaje się, że muszę przyzwyczaić się zawsze dodawać nazwy katalogów za pomocą /, więc w moim przypadku działało:
źródło
/home/web/public
. Dlaczego nginx próbuje uzyskać dostęp do tych nie odnalezionych plików, ponieważ zapomniałem usunąć tę linię,index index.html index.htm index.nginx-debian.html;
ponieważ tych plików nie ma w moim publicznym katalogu.Wygląda to na jakiś problem z uprawnieniami.
Spróbuj ustawić wszystkie uprawnienia, tak jak zrobiłeś to w mysite1, na stronie innych.
Domyślnie uprawnienia do plików powinny wynosić 644, a katalog 755. Sprawdź także, czy użytkownik, który uruchamia nginx, ma uprawnienia do odczytu tych plików i katalogów.
źródło
zmień
try_files
punkt naindex.php
ścieżkę, w „Laravel”, o którym wspomniałeś, powinno to być coś takiegoI w projekcie „Codeigniter” spróbuj tego w ten sposób
źródło
Ponieważ używasz
php-fpm
, upewnij się, żephp-fpm
użytkownik jest taki sam jaknginx
użytkownik.Sprawdź
/etc/php-fpm.d/www.conf
i ustaw php użytkownika i grupę na,nginx
jeśli tak nie jest.php-fpm
Użytkownik potrzebuje uprawnienia.źródło
Potrzebujesz uprawnień do wykonania w katalogu plików statycznych. Muszą być również zaznaczone przez użytkownika i grupę nginx.
źródło
Zmień domyślne
do
rozwiązał mój problem.
źródło
Uruchomiłem Ubuntu 15.10 i napotkałem błąd 403 Forbidden z prostego powodu. W pliku nginx.conf (plik konfiguracyjny dla nginx) użytkownik był „www-data”. Po zmianie nazwy użytkownika na [moja nazwa użytkownika] działało dobrze, zakładając, że otrzymałem niezbędne uprawnienia do mojej nazwy użytkownika. Kroki, które wykonałem:
Mój plik konfiguracyjny wygląda następująco:
źródło
Dla mnie problem polegał na tym, że działały wszystkie trasy inne niż trasa podstawowa, dodanie tej linii naprawiło mój problem:
Pełna rzecz:
źródło
Aby rozwiązać ten problem, spędziłem całą noc. Oto moje dwa centy za tę historię,
To jest uwaga dodatkowa: jeśli używasz mysql, a połączenia hhvm z mysql stają się niemożliwe, sprawdź, czy masz zainstalowany apparmor . wyłącz to.
źródło
Rozwiązałem problem, jeśli skonfiguruję w następujący sposób:
Wyświetli błąd 403.
Próbowałem
autoindex on
, ale nie działa. Jeśli zmienię konfigurację w ten sposób, to zadziała.Myślę, że dokładne dopasowanie, jeśli jest to ścieżka, powinno być katalogiem.
źródło
jeśli chcesz zachować opcję katalogu, możesz umieścić index.php przed $ uri w ten sposób.
źródło