2013-10-22 342 views
38

我有以下問題
我的hosts文件如下:虛擬主機2.4.6

127.0.0.1  localhost 
127.0.1.1  barbala4o-HP-ProBook-4530s 
127.0.1.1  mysite.localhost 

我在/etc/apache2/sites-available/mysite.localhost.conf文件如下:

<VirtualHost *:80> 
     ServerAdmin [email protected] 
     ServerName mysite.localhost 

     DocumentRoot /var/www/mysite 

     <Directory /var/www/mysite/> 
       Options Indexes FollowSymLinks 
       AllowOverride All 
       Require all granted 
     </Directory> 
     ErrorLog /var/log/apache2/mysite-error.log 
     CustomLog /var/log/apache2/mysite-access.log common 
</VirtualHost> 

在做了sudo a2ensite mysite.localhost.conf並重啓apache的mysite.localhost /並且只在本地主機上,我得到以下內容(如列出一個沒有索引文件的目錄):

Index of/

[ICO] Name Last modified Size Description 
[DIR] apache_logs/ 2013-09-24 10:15  - 
[DIR] mysql/ 2013-10-22 10:05  - 
[DIR] tools/ 2013-10-22 10:05 

而就在/var/www/目錄類似測試任何其他文件夾,當我進入localhost/test的不是加載index.php文件它表明:

Not Found 

The requested URL /adlantic was not found on this server. 

Apache/2.4.6 (Ubuntu) Server at localhost Port 80 

如果我做sudo a2dissite mysite.conf和重啓apache一切都加載確定。我想這個問題在mysite.localhost.conf的某處,但我找不到在哪裏。有任何想法嗎? 10x

+0

您是否檢查過'.../site-enabled /'中的符號鏈接,並確認它們是正確的? – Qben

+0

是的。我玩了一下mysite.localhost.cong文件,並且讓它起作用(或多或少),但現在/ var/www中的其他文件夾不能訪問,如果它們不在本地主機上,我喜歡在本地主機/測試ins的加載index.php它給我404沒有found.The目前的版本的mysite.localhost.conf是: ServerAdmin [email protected] ServerName mysite.localhost ServerAlias mysite .localhost #索引+目錄根目錄。 DirectoryIndex index.php DocumentRoot/var/www/mysite/public_html

回答

55

Ubuntu 13.10和變種已經轉移到Apache 2.4。 Apache 2.4希望默認啓用虛擬主機配置文件以.conf結尾。

解決方案

我們解決這個問題有一個你可以用它來達到相同的結果兩種方法。

  1. 第一個解決方案和簡單的解決方案是爲所有虛擬主機添加一個.conf擴展名。新的Apache 2.4會在新的Apache 2.4配置文件中列出的帶有.conf擴展名的sites-available目錄中讀取每個虛擬主機。

  2. 第二個解決方案是去除的Apache 2.4配置文件中的.conf擴展位於/etc/apache2/apache2.conf中

在舊的Apache 2.2文件.conf文件有包含網站啓用/而新的。的conf文件有

# Include the virtual host configurations: 
IncludeOptional sites-enabled/*.conf 

更改上面一行改爲:

# Include the virtual host configurations: 
IncludeOptional sites-enabled/ 

結果:該命令a2ensite YOURDOMAIN現在運行正常。如果你正在使用第二種方法;您的虛擬主機文件不需要具有.conf擴展名。

Note: Configuration file is "/etc/apache2/apache2.conf" in new Apache, so please copy document root path and other configurations from "/etc/apache2/sites-available/000-default.conf" to "/etc/apache2/apache2.conf" 
+0

我有Apache 2.4.6 您提供的任何建議都不能正常工作/已按建議配置。 –

+0

你正在使用哪一個linux操作系統?在完成上述步驟之後,輸出是什麼? –

+1

請檢查我上面解答我的問題的答案。 thx –

13

我在3小時的實驗後發現問題。顯然,在新的Ubuntu 13.10的一些愚蠢的原因虛擬主機conf文件有類似於這樣:

<VirtualHost mysite.localhost> 
     ServerAdmin [email protected] 
     ServerName mysite.localhost 
     ServerAlias mysite.localhost 

     # Indexes + Directory Root. 
     DocumentRoot /var/www/mysite/public_html 

     <Directory /var/www/mysite/public_html/> 
       DirectoryIndex index.php 
       Options Indexes FollowSymLinks 
       AllowOverride All 
       Require all granted 
     </Directory> 

     # Logfiles 
     ErrorLog /var/log/apache2/mysite-error.log 
     CustomLog /var/log/apache2/mysite-access.log common 
</VirtualHost> 

顯然,發達國家的Ubuntu 13.10決定不再有價值使用人

使得虛擬主機,而是它必須是與具體指明的DirectoryIndex

<VirtualHost mysite.localhost> 

混合時

<VirtualHost *:80> 

。這解決了我所遇到的問題,現在正在工作(希望他們應該這樣做,最終會出現一些問題)。顯然,Apache的配置文件是不同的。

+0

我認爲您在主配置文件中缺少'NameVirtualHost *:80'。這將或多或少地禁用[基於名稱的虛擬主機](http://httpd.apache.org/docs/2.2/vhosts/name-based.html)('*:80')。 – Qben

+0

是的。這就是我一直在尋找:) –

+4

當你更新到13。10,你有沒有保留舊的Apache配置文件? 'NameVirtualHost'沒有效果,並且在apache2.4中不推薦使用。 – Dan

2

對於Ubuntu 13.10Apache 2.4.6

您將有

/etc/apache2/apache2.conf 
/etc/apache2/sites-available/000-default.conf 

而且

/etc/apache2/sites-enabled/000-default.conf/etc/apache2/sites-available/000-default.conf

現在,編輯apache2.conf並添加

<Directory /home/my_site/public_html/> 
    #YOUR SETTINGS 
</Directory> 

和編輯sites-available/000-default.conf,改變<VirtualHost *:80><VirtualHost localhost:80>,以讓Apache監聽本地主機(端口80)作爲默認設置。

我們做mysite.localhost工作,將它添加到sites-available/000-default.conf

<VirtualHost mysite.localhost:80> 
    ServerName mysite.localhost 

    ServerAdmin [email protected] 

    DocumentRoot /home/my_new_site_public_html 

    ErrorLog ${APACHE_LOG_DIR}/error.log 
    CustomLog ${APACHE_LOG_DIR}/access.log combined 
</VirtualHost> 

現在編輯您的/etc/hosts/文件並從127.0.1.1改變mysite.localhostIP127.0.0.1

現在訪問http://mysite.localhost & http://localhost

: )

4

我有同樣的問題,但以上這些貼子都不適合我。後來我閱讀並審閱了Apache和PHP的每個配置文件。

我能想出在apache2.conf(在Ubuntu 13.10)有一個名爲

HostnameLookups off 

默認情況下,這個標誌將被設置爲關閉,我改變了這

HostnameLookups on 

通過這樣做,Apache開始了我的主機條目和vhost配置。

另外下面是我的實際Vhost文件。我曾經使它工作

Offcourse我也建議在Vhost指令中添加Require all granted

<VirtualHost *:80> 
    ServerName test.yoursite.domain.in 
    DocumentRoot path_to_code_base/public 
    <Directory path_to_code_base/public> 
     Options -Indexes 
     Require all granted 
     DirectoryIndex index.php 
     AllowOverride All 
    </Directory> 
    ErrorLog /path_to_code_base/logs/error.log 
    LogLevel warn 
    CustomLog /path_to_code_base/logs/access.log combined 
</VirtualHost> 

我發佈了這個帖子,以幫助那些不想浪費時間將Ubuntu從13.10降級到13.04的人。

我沒有看到這個任何博客,我也無法理解hostnameLookups的實際含義是什麼。

希望這會有所幫助。

+0

我不認爲HostnameLookup會有所幫助。根據上面的文檔,它在apache2.conf中控制着apache是​​否應該查找CLIENT的主機名。 – Torandi

+0

@Torandi apache如何在客戶端上查看主機名,當它在服務器上運行時。即使在閱讀文檔後我也有同樣的錯覺,看起來在文檔中有一些誤導每個人的東西是錯誤的。我在這裏發佈的配置是我目前使用的配置,它的工作正常。我認爲在 –

+0

上切換該標誌意味着它查找客戶端的主機名,即客戶端的反向DNS IP。對我來說VirtualHosts的工作(與Apache 2.4)沒有這個選項。 – Torandi

0

執行:
Vim可以用和你喜歡的文本編輯器像納米,微微等

VIM /etc/apache2/apache2.conf中

原始文件的變化:

# Sets the default security model of the Apache2 HTTPD server. It does 
# not allow access to the root filesystem outside of /usr/share and /var/www. 
# The former is used by web applications packaged in Debian, 
# the latter may be used for local directories served by the web server. If 
# your system is serving content from a sub-directory in /srv you must allow 
# access here, or in any related virtual host. 
<Directory /> 
     Options FollowSymLinks 
     AllowOverride None 
     Require all denied 
</Directory> 

<Directory /usr/share/> 
     AllowOverride None 
     Require all granted 
</Directory> 

<Directory /var/www/> 
     Options Indexes FollowSymLinks 
     AllowOverride None 
     Require all granted 
</Directory> 

更改全部無

編輯文件:

# Sets the default security model of the Apache2 HTTPD server. It does 
# not allow access to the root filesystem outside of /usr/share and /var/www. 
# The former is used by web applications packaged in Debian, 
# the latter may be used for local directories served by the web server. If 
# your system is serving content from a sub-directory in /srv you must allow 
# access here, or in any related virtual host. 
<Directory /> 
     Options FollowSymLinks 
     AllowOverride All 
     Require all denied 
</Directory> 

<Directory /usr/share/> 
     AllowOverride All 
     Require all granted 
</Directory> 

<Directory /var/www/> 
     Options Indexes FollowSymLinks 
     AllowOverride All 
     Require all granted 
</Directory> 
1
<VirtualHost *:80> 
     ServerAdmin [email protected] 
     ServerName mysite.localhost 

     DocumentRoot /var/www/mysite 

     <Directory /var/www/mysite/> 
       Options Indexes FollowSymLinks 
       AllowOverride All 
       Require all granted 
     </Directory> 
     ErrorLog /var/log/apache2/mysite-error.log 
     CustomLog /var/log/apache2/mysite-access.log common 
</VirtualHost> 

在我來說,我剛剛更換<VirtualHost *:80><VirtualHost mysite.localhost:80>大量的試驗和錯誤

我希望這有助於以後。

問候,

0

對於Kubuntu的14.04 &的Apache 2.4.7

嘗試上述建議,並在權限問題還是顛簸後, 「搭配chmod 755 $ HOME」 爲我工作。 不適用於多用戶系統。

0

對於那些拉着頭髮的人來說,如果您使用的是AWS實例,則需要對所有這些設置使用sudo。

sudo a2ensite example.com 

請記住,即使重新啓動apache也需要執行此操作。如果你沒有看到你的改變發生,這可能是罪魁禍首。

sudo service apache2 restart