2012年11月6日 星期二

Linux + Apache + MySQL - PHP 安裝過程記錄 (LAMP)

安裝 Apache(httpd) + MySQL(mysql, mysql-server) + PHP(php, php-mysql)
# yum install httpd mysql mysql-server php php-mysql

啟用「使用者家目錄網頁支援」,修改 Apache 設定檔
# vi /etc/httpd/conf/httpd.conf

找到以下這段,並且修改

<ifmodule mod_userdir.c="mod_userdir.c">
    #UserDir disable
    UserDir www
</ifmodule>

UserDir disable 設定前面加上註解符號「#」,然後重新啟動 Apache 伺服器
# /etc/init.d/httpd restart

隨便先登入一個使用者,假設使用者名稱為 user

建立 public_html 目錄,並且設定權限
# mkdir ~/public_html
# chmod 755 /home/user/public_html
# chmod 711 /home/user

正常來說,這樣子就可以使用了,但是在支援 SELinux 的 Linux 系統中,必須還要做一些安全機制的設定跟處理,否則開啟瀏覽器會出現 You don't have permission 的錯誤訊息,可以檢查  /var/log/messages 得知必須先做一些處理才能正常使用。


# setsebool -P httpd_enable_homedirs=1
# restorecon -Rv /home/

第一個指令的用途再開啟個人網頁支援,第二個指令則是處理安全類型。
在執行 SELinux 設定的時候有時候電腦會跑很久,並不是當機,請耐心等待。

另外由於網頁是對網路外面的使用者服務,因此我們還需要設定一下防火牆及一些 SELinux 的機制

開啟網頁伺服器網路對外預設監聽的 80 Port,可以透過 system-config-network-tui 套件進入圖形化設定介面,或者直接修改防火牆設定檔(官方不建議,請自己小心修改,因為我比較喜歡了解實際設定檔案在哪裡)

vi /etc/sysconfig/iptables

-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

新增上面這行,然後整個設定檔後看起來如下面這樣
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

重新啟動防火牆服務
# /etc/init.d/iptables restart

最後,SELinux 也要設定放行網路連線的權限
# setsebool -P httpd_can_network_connect=1

重新啟動 Apache 即可
# /etc/init.d/httpd restart

最後其實就可以使用家目錄對應的網頁伺服器了,我們來測試一下 Apache + PHP 的功能是否正常

例如使用者 user,/home/user/public_html 底下放置一個檔案 index.php 內容如下

<?php
    phpinfo();
?>

存檔後,在瀏覽器網址輸入 http://您的網址/~user/index.php,就可以看到一個 phpinfo 的測試頁面了(安全考量,建議測試成功後砍掉此檔案)


預設的情況下,網頁索引的功能是打開的,也就是只要別人輸入網址不指定檔名,網頁會把整個底下的目錄跟檔案顯示出來,這樣是很危險的,建議還是把它關掉比較安全。

# vi /etc/httpd/conf/httpd.conf

<Directory "/var/www/html">

# Possible values for the Options directive are "None", "All",
# or any combination of:
#   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important.  Please see
# http://httpd.apache.org/docs/2.2/mod/core.html#options
# for more information.
#
    Options Indexes FollowSymLinks
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   Options FileInfo AuthConfig Limit
#
    AllowOverride None
#
# Controls who can get stuff from this server.
#
    Order allow,deny
    Allow from all
</Directory>

注意此行:Options Indexes FollowSymLinks,把 Indexes 拿掉,可以用搜索找出其他區塊是否也有相同的設定,一律把它刪除,然後重新啟動 Apache 試試看吧。

這樣子,Apache + PHP 的基本設定就完成了,讓我們來測試一下 MySQL 是否功能正常吧!
首先預設的情況下,MySQL 是沒有啟動的,我們先將其啟動起來

# /etc/init.d/mysqld start

預設root帳號是沒有密碼的,很危險,所以我們要趕快使用 mysqladmin 工具設定 root 密碼!

# mysqladmin -u root password '密碼'

然後就是將 MySQL 設定成開機自動啟動服務的功能
# chkconfig mysqld on

大功告成,可以登入進去測試看看,使用 mysql -u root -p 以 root 身分登入,並且輸入密碼

[root@localhost conf]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1496
Server version: 5.1.61 Source distribution

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| cms                |
| mysql              |
| test               |
+--------------------+
4 rows in set (0.00 sec)

mysql> quit
Bye
[root@localhost conf]#

show database 為 MySQL 中的指令,看看MySQL內有那些資料庫,quit 指令可以離開 MySQL 的介面(MySQL 介面中指令必須以分號「;」作為結尾才可以執行)。

當然最好幫 MySQL 安裝一下圖形化的操作介面(例如 phpMyAdmin 的網頁介面,或者更簡單的直接安裝圖形介面的軟體像是 WorkBench 等等),文字介面畢竟不是那麼容易使用。

3 則留言:

  1. 請問,在centos7中,我安裝了pppoe-setup後,暫時關閉了NetworkManager功能,

    啟動ppp0以及網卡,原本以為可以上網,但是出現SELinux否定ppp存取要求,我索性把SELinux也設定不啟動,可是我還是無法上網,可幫忙指點嗎?

    1.我的網路是pppoe撥接,ISP有提供一組固I+7組浮I

    2.ISP業者為SEEDNET, 所以設定pppoe時,帳號輸入為 : Txxxxxx#,因為我當伺服器使用,要取得固I

    3.網卡一張,只有一部主機

    感恩指教

    回覆刪除
    回覆
    1. 您好,抱歉人在國外一段時間網路不方便,部落格有點年久失修,希望妳已經解決您的問題^^
      SELinux啟用會遇到的問題確實蠻多的,以您的狀況來說比較複雜以這樣的資訊很難判斷,但是我自己曾經有遇到安裝了pppoe-server 導致連線上有問題,可以移除 pppoe-server 試試看。

      刪除
    2. 我用中華電信1固+7浮,是無法在linux用pppoe的,似乎是假固定,它只是每次撥號都給同一個IP,我用adsl上的Virtual Server+pppoe功能把固定IP轉到linux主機

      刪除