Apache VirtualHost 403 zabroniony

123

Niedawno próbowałem skonfigurować serwer testowy z Apache. Witryna musi działać w domenie www.mytest.com. Zawsze pojawia się 403 Forbiddenbłąd. Jestem na serwerze Ubuntu 10.10. Katalog główny dokumentu jest w reż /var/www. Oto moje ustawienia:

Zawartość / var / www

ls -l /var/www/

total 12
drwxr-xr-x 2 root root 4096 2011-08-04 11:26 mytest.com
-rwxr-xr-x 1 root root 177 2011-07-25 16:10 index.html

Zawartość pliku hosta na serwerze (z IP 192.168.2.5)

cat /etc/hosts

127.0.0.1 localhost 
127.0.1.1 americano
192.168.2.5 americano.mytest.com www.mytest.com

# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Konfiguracja witryny

<VirtualHost *>
ServerAdmin [email protected]
ServerName www.mytest.com
ServerAlias mytest.com

DocumentRoot "/var/www/mytest.com"

ErrorLog /var/log/apache2/mytest-error_log
CustomLog /var/log/apache2/mytest-access_log combined

#
# This should be changed to whatever you set DocumentRoot to.
#
<Directory "/var/www/mytest.com">
Options -Indexes FollowSymLinks
AllowOverride None

Order allow,deny
Allow from all
</Directory>
</VirtualHost>

Nie mam .htaccesspliku w katalogu głównym dokumentów. Uprawnienia są ustawione poprawnie (czytelne dla danych www).

Jeśli wpiszę adres IP z pulpitu, witryna wyświetli się poprawnie. Zmieniłem plik hosts na moim pulpicie, aby wskazywał www.mytest.comna adres IP serwera. Kiedy go używam, otrzymuję 403. Ponieważ wiele funkcji tej witryny jest wrażliwych na nazwę witryny, muszę mieć dostęp do witryny za pomocą nazwy domeny.

Inną dziwną rzeczą jest to, że nawet jeśli wszystkie pliki dziennika są tworzone poprawnie, nie zawierają informacji dotyczących tego błędu.

Utknąłem. Czy ktoś może pomóc?

Yuchen Wang
źródło
czy możesz dodać zawartość: sudo sh -c ". /etc/apache2/envvars; apache2 -S"(lista Virtualhostów) oraz:sudo sh -c ". /etc/apache2/envvars; grep -R Listen /etc/apache2/*|grep -v \"#\"; grep -R NameVirtual /etc/apache2/*|grep -v \"#\""
regilero,
Pierwsza komenda zwraca w następujący sposób: VirtualHost configuration: 192.168.2.5:* www.mytest.com (/etc/apache2/sites-enabled/mytest.com:1) Syntax OK Druga zwraca: /etc/apache2/ports.conf:Listen 80 /etc/apache2/ports.conf: Listen 443 /etc/apache2/ports.conf: Listen 443 /etc/apache2/conf.d/virtual.conf:NameVirtualHost *
Yuchen Wang
1
spróbuj na serverfault.com
regilero

Odpowiedzi:

296

Apache 2.4.3 (a może nieco wcześniej) dodał nową funkcję bezpieczeństwa, która często powoduje ten błąd. Możesz również zobaczyć komunikat dziennika w postaci „klient odrzucony przez konfigurację serwera”. Ta funkcja wymaga tożsamości użytkownika, aby uzyskać dostęp do katalogu. Jest włączana przez DEFAULT w pliku httpd.conf dostarczanym z Apache. Możesz zobaczyć włączenie tej funkcji za pomocą dyrektywy

Require all denied

Zasadniczo oznacza to odmowę dostępu wszystkim użytkownikom. Aby rozwiązać ten problem, usuń dyrektywę denied (lub znacznie lepiej) dodaj następującą dyrektywę do katalogów, do których chcesz udzielić dostępu:

Require all granted

jak w

<Directory "your directory here">
   Order allow,deny
   Allow from all
   # New directive needed in Apache 2.4.3: 
   Require all granted
</Directory>
Phil L.
źródło
3
Chciałbym zauważyć, że jeśli masz ten problem z wirtualnymi hostami, będziesz musiał dodać „Wymagaj wszystkich przyznanych” do ustawień każdego wirtualnego hosta w pliku apache / conf / extra / httpd-vhosts.conf.
Soundfx4
1
Dodałem tę dyrektywę do /etc/apache2/apache2.confi pomogło, dziękuję!
DmitMedv
@ Soundfx4, nie ma folderu o nazwie apache/conf/extrawewnątrz/etc/apache2
Black
Dodałem /var/dev/website.com i otrzymywałem błąd 403. Dodanie sugerowanej dyrektywy do /etc/apache2/apache2.conf (ubuntu) załatwiło sprawę. Dzięki chłopaki!
LoveFineArt
Dziękuję Panu. Apache jest coraz trudniejsze do pracy w tych dniach ...
OoDeLally
15

W przypadku apache Ubuntu 2.4.7 w końcu stwierdziłem, że potrzebujesz białej listy swojego wirtualnego hosta w apache2.conf

# access here, or in any related virtual host.
<Directory /home/gav/public_html/>
    Options FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>
GAV
źródło
8

Może to być problem z uprawnieniami.

każda ścieżka nadrzędna do katalogu głównego dokumentu wirtualnego musi być czytelna, zapisywalna i wykonywalna przez użytkownika httpd serwera WWW

według tej strony o błędach Apache 403.

Ponieważ używasz Allow from all, kolejność nie powinna mieć znaczenia, ale możesz spróbować przełączyć ją na, Deny,Allowaby ustawić domyślne zachowanie na „zezwalanie”.

Wyskakuje
źródło
4
Zapisywalny? naprawdę? Nie jestem pewien
php-dev
5

Przenieś klauzulę Directory z virtualhost i umieść ją przed zadeklarowaniem virtualhost.

Długo mnie też doprowadzało do szału. Nie wiem dlaczego. To kwestia Debiana.

samtresler
źródło
Woah, to takie dziwne.
kako-nawao
0

Jeśli zrobiłeś wszystko dobrze, po prostu nadaj katalogowi domowemu uprawnień, na przykład:

sudo chmod o+x $HOME

następnie

sudo systemctl restart apache2
cagcak
źródło
0

Problem polegał na tym, że uprawnienia dostępu do pliku były nieprawidłowe.

Zmieniłem uprawnienia katalogu i zadziałało.

Sebastian Viereck
źródło
0

Miałem ten problem również na Arch Linux ... kosztuje mnie to trochę czasu, ale teraz cieszę się, że znalazłem swój błąd:

Mój katalog z .htmlplikami na moim koncie.
Ustawiłem wszystko, r+xale nadal mam 403błąd.
Potem wróciłem całkowicie i spróbowałem ustawić mój katalog domowy na wykonanie, co rozwiązało mój problem.

TornaxO7
źródło
-1

Właśnie spędziłem kilka godzin nad tym głupim problemem

Najpierw zmień uprawnienia, używając tego w terminalu

find htdocs -type f -exec chmod 664 {} + -o -type d -exec chmod 775 {} +

Nie wiem jaka jest różnica między 664 a 775 Zrobiłem oba 775 w ten sposób Również htdocs potrzebuje ścieżki katalogu na przykład dla mnie to była

/usr/local/apache2/htdocs 

find htdocs -type f -exec chmod 775 {} + -o -type d -exec chmod 775 {} +

To też druga głupia rzecz

upewnij się na przykład, że link src do obrazu jest nazwą Twojej domeny

src="http://www.fakedomain.com/images/photo.png"

Upewnij się, że masz

EnableSendfile off in httpd.conf file
EnableMMAP off in httpd.conf file

Edytujesz te za pomocą pico w terminalu

Stworzyłem również katalog na obrazy specjalnie po to, aby po wpisaniu w pasku adresu przeglądarki nazwa_domeny.com/images, otrzymałeś listę zdjęć, które można pobrać i które należy pobrać, aby wskazać pliki graficzne, które działają poprawnie

<Directory /usr/local/apache2/htdocs/images>
AddType images/png .png
</Directory>

A to są rozwiązania, które wypróbowałem, teraz mam działające obrazy ... yay !!!

Na następny problem (y)

Jacob David C. Cunningham
źródło