1.LAMP所需要的软件:
    ----httpd(提供Apache主程序)
    ----mysql(MySQL客户端程序)
    ----mysql-server(MySQL服务器程序)
    ----php(PHP主程序含给Apache使用的模块)
    ----php-devel(PHP的开发工具,与PHP外挂的加速软件有关)
    ----php-mysql(提供给PHP程序读取MySQL数据库的模块)
2.Apache的设定:
    ----针对服务器环境的设置项目
    ####/etc/httpd/conf/httpd.conf ##############################
ServerTokens    OS    #告诉客户端服务器的版本和操作系统,可以避免系统的信息被远程的用户查看到
ServerRoot    "/etc/httpd"     #服务器设置的最顶层目录,有点类似chroot的感觉
PidFile    run/httpd.pid    #放置PID的文件,可方便Apache软件管理。相对路径
Timeout    60    #不论接收或发送,当持续连接等待超过60秒则断开这次连接
KeepAlive    On    #是否允许持续性的连接,也就是一个TCP连接可以具有多个文件资料传送的要求
MaxKeepAliveRequests    500    #与前一个设置有关,当KeepAlive为On则这个数值可决定该次连接最大传输数量
KeepAliveTimeout    15    #在允许KeepAlive的条件下,则盖茨连接在最后一次传输后等待延迟的秒数
<IfModule prefork.c>     #底下兩個 perfork, worker 與記憶體管理有關!
StartServers 8     #啟動 httpd 時,喚醒幾個 PID 來處理服務的意思
MinSpareServers 5     #最小的預備使用的 PID 數量
MaxSpareServers 20     #最大的預備使用的 PID 數量
ServerLimit 256     #服务器的限制
MaxClients 256    #最多可以容許多少個用戶端同時連線到 httpd 的意思!
MaxRequestsPerChild 4000
</IfModule>
<IfModule worker.c>
StartServers 4MaxClients 300
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
##以上2个内存管理模块是与服务器连接资源有关的设置项目。worker模块占用的内存较小,prefork虽然占用较大的内存,不过速度与##worker差异不大,且在内存使用设计上更优秀,可以进行自我排错,是默认的模块。
##要选择使用哪个模块,可修改/etc/sysconfig/httpd
Listen 80    #监听接口
#载入模块,Apache要使用PHP和mysql需要载入libphp5.so和mysql.so
LoadModule    auth_basic_module    modules/mod_auth_basic.so
#......(以下载入的module省略).......#
Include conf.d/*.conf    #将/etc/httpd/conf.d/目录下的conf文件的配置添加到主配置文件中
User    apache    
Group    apache    #在前面prefork,worker等模块启动的process的属主和属组,未来提供的网页文件能不能被浏览到与这个身份有关
ServerAdmin    luyx@luyx30.no-ip.org    #系统管理员的E-mail
ServerName    www.luyx30.no-ip.org    #服务器的主机名,若没指定则与hostname的输出为依据,一定要对应得到IP(DNS或hosts)  
UseCanonicalName   Off    #是否使用标准主机名?如果主机有多个主机名,若这个设置为On,Apache只接受上面指定的主机名
DirectoryIndex    index.html index.php    #首页文件名的设置
#AddDefaultCharset UTF-8    #默认编码
AddHandler    cgi-script    .cgi .pl    #设置目录具有执行cgi和pl等CGI的能力
##网页及目录设置
DocumentRoot    "/var/www/html"    #apache放置首页的主目录
<Directory />    
    Options FollowSymLinks
    AllowOverride    None
</Directory>
##以上设置是针对WWW服务器的默认环境
<Directory "/var/html/www">
    Options Indexes FollowSymLinks    
####Options的主要参数有:
#Indexes:如果在此目录下找不到首页文件,就显示整个目录下的文件名,至于首页文件则与DirectoryIndex设置有关
#FollowSymLinks:可让连接文件有效的离开首页主目录(相当于被chroot)
#+ExecCGI:让此目录具有执行CGI程序的权限
#Includes:让一些Server-Side Include程序可以执行
#MultiViews:在同一主机上,可以依据客户端的语言而给予不同的语言显示
    AllowOverride None
####AllowOverride的主要参数:(主要设置是否允许额外的配置文件.htaccess的某些参数覆盖
#All:全部的权限均可被覆盖
#AuthConfig:仅有网页认证(账号和密码)可覆盖
#Indexes:仅允许Indexes方面的覆盖
#Limits:允许用户利用Allow,Deny与Order管理可浏览的权限
#None:不可覆盖,也就是让.htaccess文件失效
    Order  allow,deny
####决定此目录是否可被Apache的PID所浏览的权限设置
#deny,allow:以deny优先处理,但没有写入规则的则默认allow
#allow,deny以allow优先处理,但没有写入规则的则默认deny
    Allow from all    
</Directory>
Alias  /icons/  "/var/www/icons/"    #制作目录别名。输入ip/icons/即可访问/var/www/icons/目录的内容,相当于快捷方式
<Directory "/var/www/icons">
    Options  Indexes  MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
    Deny from 192.168.1.111    #拒绝来自192.168.1.111的访问
    Deny from .gov        #拒绝来着.gov主机的访问,如果想让某个网络或者IP无法浏览,最好利用iptables,但若仅是几个目录不想
                                    #让别人查阅,那这种方式就值得参考
</Directory>
ScriptAlias  /cgi-bin/  "/var/www/cgi-bin/"    #与上面的icons类似,是以ScriptAlias(可执行脚本)为设置值,可指定目录具有
<Directory "/var/www/cgi-bin">                   # 执行ExecCGI能力
    Option None
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
<Directory "/var/www/html/lan">                #利用Limit来限制客户端可进行的操作
    AllowOverride    None
    Options    FllowSymLinks
    <Limit GET POST OPTIONS>               #/var/www/html/lan目录仅能进行GET,POST,OPTIONS等功能其他都不允许
        Order allow,deny
        Allow from all
    </Limit>
    <LimitExcept GET POST OPTIONS>
        Order deny,allow
        Deny from all
    </LimitExcept>
</Directory>
<IfModule mod_userdir.c>    #这个设置可以允许用户拥有个人主页,此时可通过http://你的主机名/~username/来访问
    UserDir    www                   #不过这要保证用户主目录的权限为711,且SELinux中的httpd_enable_homedirs=1    
</IfModule>                     #可以在/var/www/html目录下用alias或ln -s /home/username/www  username这样可以不用~访问个人主目录
#ErrorDocument 404 /missing.html    #指定系统出错时,返回给浏览器的信息页面
#ErrorDocument 405 /missing2.html
#利用Apache提供的特别功能来查看主机目前的状态
LoadModule    status_module    modules/mod_status.so
ExtendStatus    On
<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow  from 192.168.1.0/24
    Allow from 127.0.0.1
</Location>
#利用.htaccess来设置账户密码来保护受保护的目录    
AccessFileName    .htaccess
<File ~ "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy all
</File>
<Directory "/var/www/html/protect">    #后续需要在该目录下建立.htaccess文件
    AllowOverride AuthConfig
    Order allow,deny
    Allow from all
</Directory>
####/etc/httpd/conf/httpd.conf ############################################
    ----.htaccess
#### .htaccess ########################################################
AuthName    "Protect test by .htaccess"    #提示字符
Authtype    Basic    #认证类型
AuthUserFile    /var/www/apache.passwd    #保护目录使用的账户密码配置文件,不可放置在Apache可以浏览的目录
require valid-user    #在账户密码内的用户都可登录
#### .htaccess ########################################################
    ----htpasswd
    Apache默认读取的账户/密码设置数据是由htpasswd所建立的,语法如下:
    htpasswd [-cmdD] 密码文件文件名 用户账号
    -c: 建立后面的密码文件,如果该文件已经存在,则原来的数据会被删除,如果只是添加用户不要加此参数
    -m: 不用默认的CRYPT加密,改用MD5方式加密密码
    -d: 使用更负责的SHA方式加密
    -D: 删除后面接的用户账号
3.虚拟主机的设定
    ----虚拟主机:就是让你的一台服务器上,有好几个"主网页"存在即硬件上只有一台主机,从网址上看似乎有多台
    ----前提:必须要拥有多个主机名才行。1,向ISP申请合法DNS;2,自己架设合法授权的DNS
    ----范例:
[root@www ~]# vim /etc/httpd/conf.d/virtual.conf
# 底下這一行在規定『本機任何介面的 port 80 所指定的虛擬主機』的意思。
NameVirtualHost *:80
# 先針對兩個多出來的可瀏覽目錄進行權限方面的規範啊!
<Directory "/var/www/www">
    Options FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
<Directory "/var/ftp">
    Options FollowSymLinks Indexes
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>
# 針對三部主機的 DocumentRoot 進行定!
<VirtualHost *:80>
ServerName linux.centos.vbird
DocumentRoot /var/www/html
</VirtualHost>
<VirtualHost *:80>
    ServerName www.centos.vbird
    DocumentRoot /var/www/www
    CustomLog /var/log/httpd/www.access_log combined # 不同的主頁可以指定不同的登錄檔資訊,這樣比較好 debug 與分析啦!
</VirtualHost>
<VirtualHost *:80>
    ServerName ftp.centos.vbird
    DocumentRoot /var/ftp
</VirtualHost>
4.PHP模块
    ----在Apache的设置文件中要调整PHP模块的配置文件如下:
[root@www conf.d]# vim /etc/httpd/conf.d/php.conf
<IfModule prefork.c> <==根據不同的 PID 模式給予不同的 PHP 運作模組
LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule worker.c>
LoadModule php5_module modules/libphp5-zts.so
</IfModule>
AddHandler php5-script .php <==所以副檔名一定要是 .php 結尾!
AddType text/html .php <==.php 結尾的檔案是純文字檔
DirectoryIndex index.php <==首頁檔名增加 index.php 喔!
#AddType application/x-httpd-php-source .phps
5.使用https
    ----建立证书
# 1. 先到 /etc/pki/tls/certs 去建立一把給 Apache 使用的私鑰檔案:
[root@www ~]# cd /etc/pki/tls/certs
[root@www certs]# make vbird.keyumask 77 ;
/usr/bin/openssl genrsa -aes128 2048 > vbird.key <==其實是這個指令
Generating RSA private key, 2048 bit long modulus.................................................................+++...............................+++e is 65537 (0x10001)
Enter pass phrase: <==這裡輸入這把私鑰的密碼,需要多於四個字元!
Verifying - Enter pass phrase: <==再一次!
# 2. 將剛剛建立的檔案中,裡面的密碼取消掉!不要有密碼存在啦!
[root@www certs]# mv vbird.key vbird.key.raw
[root@www certs]# openssl rsa -in vbird.key.raw -out vbird.key
Enter pass phrase for vbird.key.raw: <==輸入剛剛的密碼啦!
writing RSA key
[root@www certs]# rm -f vbird.key.raw <==舊的金鑰檔移除
[root@www certs]# chmod 400 vbird.key <==權限一定是 400 才行!
# 3. 建置所需要的最終憑證檔!
[root@www certs]# make vbird.crt SERIAL=2011080801umask 77 ;
/usr/bin/openssl req -utf8 -new -key vbird.key -x509 -days 365 -out vbird.crt -set_serial 2011080801 <==可以加入日期序號
You are about to be asked to enter information that will be incorporatedinto your certificate request.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:TaiwanLocality Name (eg, city) [Default City]:Tainan
Organization Name (eg, company) [Default Company Ltd]:KSUOrganizational
Unit Name (eg, section) []:DIC
Common Name (eg, your name or your server's hostname) []:www.centos.vbird
Email Address []:vbird@www.centos.vbird
    ----修改/etc/httpd/conf/ssl.conf的内容,使用自定证书,并将加密首页和非加密分开
[root@www ~]# vim /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/pki/tls/certs/vbird.crt
SSLCertificateKeyFile /etc/pki/tls/certs/vbird.key  
Listen 443 <==預設的監聽埠口!不建議修改!
<VirtualHost _default_:443> <==就是虛擬主機的設定囉!
DocumentRoot "/var/www/https" <==約84行,拿掉註解改掉目錄名稱
ServerName *:443 <==拿掉註解,並將主機名稱設定為 *
SSLEngine on <==有支援 SSL 的意思!
SSLCipherSuite  ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOWSSL
CertificateFile /etc/pki/tls/certs/vbird.crt
SSLCertificateKeyFile /etc/pki/tls/certs/vbird.key
</VirtualHost>

整理自:鸟哥的linux私房菜服务器篇。