11.14/11.15 Apache和PHP結合php
11.16/11.17 Apache默認虛擬主機html
11.14/11.15 Apache和PHP結合:linux
~~ONEapache
配置httpd支持php,步驟以下:vim
(咱們雖然知道Apache調用了php做爲他的模塊,但咱們還沒作實驗,還不知道他能不能解析php。因此咱們要編輯http的配置文件)windows
httpd主配置文件/usr/local/apache2/conf/httpd.conf瀏覽器
vim /usr/local/apache2/conf/httpd.conf //修改如下4個地方服務器
實例1. ServerName 開啓Apache不顯示提示php7
實例2. Require all denied 防止403app
實例3. AddType application/x-httpd-php .php 解析PHP。要增長這一行
實例4. DirectoryIndex index.html index.php 增長索引頁。後面要加index.php
/usr/local/apache2/bin/apachectl -t 測試,修改過配置文件完語法是否對
/usr/local/apache2/bin/apachectl graceful 從新加載配置文件,不會重啓服務
/usr/local/apache2.4/bin/apachectl start 啓動服務
netstat -lntp (這兩個阿銘沒說怎麼用)
curl localhost
~~TWO
驗證apache支持不支持解析php,步驟以下:
實例5.
vim /usr/local/apache2/htodcs/1.php 增長以下內容
咱們在訪問的時候是訪問的這個目錄下的文件 /htodcs
<?php
phpinfo();
?>
~~THREE
若是遇到php不能解析的狀況,要檢查Apache的配置文件:
1. /usr/local/apache2/bin/apachectl -M 查看有沒有加載php模塊。
2. ls /usr/local/apache2/modules/libphp5.so 若是沒有加載咱們要看一看這個模塊,有沒有這個文件
3. vim /usr/local/apache2/conf/httpd.conf 若是有.so這個文件,就看一下配置文件。有沒有加載或被註釋php模塊
LoadModule php5_module modules/libphp5.so
#LoadModule php7_module modules/libphp7.so
4. vim /usr/local/apache2/conf/httpd.conf 還要檢查配置文件,有沒有加載AddType
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .php 咱們本身配置進去的這個(注意.php前面要加空格,根據前兩行寫)
5. vim /usr/local/apache2/conf/httpd.conf 還要檢查有沒有加載index.php (索引頁)
<IfModule dir_module>
DirectoryIndex index.html index.php 咱們在後面加進去的
curl localhost/test.php (這個阿銘沒說上面用)
實例:
1.
[root@axinlinux-01 ~]# /usr/local/apache2/bin/apachectl start 開啓Apache的時候會有提示
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::20c:29ff:fe87:4224. Set the 'ServerName' directive globally to suppress this message
[root@axinlinux-01 ~]# vi /usr/local/apache2/conf/httpd.conf viApache的配置文件。
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
#
ServerName www.example.com:80 搜索 ServerName,並把前面的註釋去掉。再啓動Apache就不會有提示了
[root@axinlinux-01 ~]# vi /usr/local/apache2/conf/httpd.conf viApache配置文件。
LoadModule php5_module modules/libphp5.so
#LoadModule php7_module modules/libphp7.so 把php7註釋地掉,咱們用php5。否則會有衝突
2.
咱們先用瀏覽器訪問如下咱們的IP,其實並不通
這種狀況下,咱們用cmd ping一下IP,是通的
而後,在ping80端口。須要打開telnet
步驟爲,打開控制面案>程序>程序和功能>打開或關閉Windows功能>
找到 Telnet客戶端,前面打上勾,點肯定
以上,Windows打開Telnet完成
咱們再回到cmd上,ping80端口,結果是不通。是由於在咱們linux上並無打開80端口
[root@axinlinux-01 ~]# iptables -nvL 看一下 iptables規則。也並無發現80端口
咱們先臨時給他加上80端口
[root@axinlinux-01 ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT -j ACCEPT爲來源客戶端所有打開,也能夠-s指定來源客戶
此時,咱們在瀏覽器上IP就通了
此時,咱們再回到cmd上。再次ping 80端口。顯示如下畫面,爲通
爲防止瀏覽器出現403或測試爲403,咱們要在配置文件裏,配置一下 Require all denied
[root@axinlinux-01 ~]# vi /usr/local/apache2/conf/httpd.conf
<Directory />
AllowOverride none
Require all denied 把這一行,denied改成granted
並檢查下面Require all granted是否是也是爲 granted
#
# Controls who can get stuff from this server.
#
Require all granted
[root@axinlinux-01 ~]# /usr/local/apache2/bin/apachectl -t 配置完配置文件要-t檢查一下
Syntax OK
[root@axinlinux-01 ~]# /usr/local/apache2/bin/apachectl graceful 在graceful從新加載
3.
[root@axinlinux-01 ~]# vim /usr/local/apache2/conf/httpd.conf 修改配置文件
搜索 AddType
#
# If the AddEncoding directives above are commented-out, then you
# probably should define those extensions to indicate media types:
#
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz 找到這兩行,這有兩個,一個.Z一個.tgz的。不要加錯了
4.
[root@axinlinux-01 ~]# vim /usr/local/apache2/conf/httpd.conf
搜索 Index
[root@axinlinux-01 ~]# /usr/local/apache2/bin/apachectl -t 修改完配置文件要 -t
Syntax OK
[root@axinlinux-01 ~]# /usr/local/apache2/bin/apachectl graceful 修改完配置文件要 graceful
5.
[root@axinlinux-01 ~]# vi /usr/local/apache2/htdocs/1.php
<?php
phpinfo(); 函數,能夠把PHP的相關信息打印出來
?>
咱們在瀏覽器上輸入 192.168.159.128/1.php
這個界面出來,就表明php就支持解析
----------------------------------------------------------------------------------------------------------------------------------------------------
11.16/11.17 Apache默認虛擬主機
1. 可理解爲,一臺服務器能夠訪問多個網站,每一個網站都是一個虛擬主機
概念:域名(主機名)、DNS、解析域名、hosts
2. 咱們在linux上設置了hosts,可讓他訪問到1.php,是由於在apa配置文件裏DocumentRoot定義了網站的根目錄在哪裏
DocumentRoot "/usr/local/apache2/htdocs"
他的域名就是配置文件裏上面定義的ServerName www.example.com:80,這個ServerName可有用任何域名去訪問他。而這個就是Apache的默認主機,也就是說任何一個域名,只要是指定到這個IP,都會指向到這個站點,這個站點就是默認虛擬主機
3. 一樣windows上也是能夠的,他的位置在 C:\Windows\System32\drivers\etc\hosts
在裏面寫上192.168.159.130 www.hao123.com
咱們在訪問www.hao123.com的時候就會訪問到192.168.159.130
4. 任何一個域名解析到這臺機器,均可以訪問的虛擬主機就是默認虛擬主機。
若是咱們隊Apache的這個配置文件沒有作任何的修改,僅僅只是使用的是httpd.cong,他實際上就是咱們主配置文件裏面定義的ServerName和DocumentRoot。若是咱們以爲很差管理,不想讓域名執行到這來,由於一個配置文件裏面只能配置一個ServerName。咱們要打開一個虛擬主機配置文件:
~4.1 vim /usr/local/apache2/conf/httpd.conf 搜索httpd-vhost,去掉#。表明以上的ServerName DocumentRoot就不能用啦。
~4.2 vim /usr/local/apache2/conf/extra/httpd-vhosts.conf 這個就是虛擬主機配置文件。改成以下
<VirtualHost *:80> 每個VirtualHost都表明一個主機
ServerAdmin admin@aminglinux.com 這個是定義管理員的郵箱,要不要都行
DocumentRoot "/data/wwwroot/abc.com" 網站根目錄。只能寫一個
ServerName abc.com 訪問他的域名是什麼。可支持alias
ServerAlias www.abc.com www.123.com 可寫多個別名。意思是abc.com能訪問,這些別名也能夠訪問
ErrorLog "logs/abc.com-error_log" 錯誤日誌
CustomLog "logs/abc.com-access_log" common 訪問日誌
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ErrorLog "logs/111.com-error_log"
CustomLog "logs/111.com-access_log" common
</VirtualHost>
~4.3 修改完要建立相應的目錄
mkdir /data/wwwroot
mkdir /data/wwwroot/abc.com
mkdie /data/wwwroot/111.com
~4.3 在兩個站點根目錄下建立.php
vim /data/wwwroot/abc.com/index.php
vim /data/wwwroot/111.com/index.php
~4.4 修改服務是否正確以及從新加載
/usr/local/apache2/bin/apachectl –t
/usr/local/apache2/bin/apachectl graceful
~4.5 curl -x 測試
curl -x192.168.159.128:80 www.abc.com 測試咱們配置的這個域名訪問這個IP的結果,是否是咱們以前設置的結果
總結:
1. 若是咱們沒有設置的域名段,訪問過來,他就會走第一個咱們設置的虛擬主機
2. 咱們一旦打開了這個虛擬主機配置(也就是咱們註釋掉的httpd-vhost),咱們以前配置的SurverName DocumentRoot都會失效
3. 每個VirtualHost都表明一個站點,都是一個虛擬主機。在虛擬主機裏有一個比較特殊的,就是默認虛擬主機。就是不管任何的域名解析到這個IP上,都會去訪問這個默認虛擬主機
實例:
[root@axinlinux-01 ~]# vim /usr/local/apache2/conf/httpd.conf
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
[root@axinlinux-01 ~]# vim /usr/local/apache2/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>m
DocumentRoot "/data/wwwroot/abc.com"
ServerName abc.com
ServerAlias www.abc.com www.123.com
ErrorLog "logs/abc.com-error_log"
CustomLog "logs/abc.com-access_log" common
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/data/wwwroot/111.com"
ServerName 111.com
ServerAlias www.example.com
ErrorLog "111.com-error_log"
CustomLog "111.com-access_log" common
</VirtualHost>
[root@axinlinux-01 ~]# mkdir /data/wwwroot
[root@axinlinux-01 ~]# mkdir /data/wwwroot/abc.com
[root@axinlinux-01 ~]# mkdir /data/wwwroot/111.com
[root@axinlinux-01 ~]# vim /data/wwwroot/abc.com/index.php
[root@axinlinux-01 ~]# vim /data/wwwroot/111.com/index.php
[root@axinlinux-01 ~]# /usr/local/apache2/bin/apachectl -t
Syntax OK
[root@axinlinux-01 ~]# /usr/local/apache2/bin/apachectl graceful
abc.com[root@axinlinux-01 ~]# curl -x192.168.159.128:80 www.abc.com
abc.com[root@axinlinux-01 ~]# curl -x192.168.159.128:80 www.abc.cn
abc.com[root@axinlinux-01 ~]# curl -x192.168.159.128:80 www.example.cn
abc.com[root@axinlinux-01 ~]# curl -x192.168.159.128:80 www.example.com
111.com[root@axinlinux-01 ~]# curl -x192.168.159.128:80 111.com
111.com[root@axinlinux-01 ~]#