CentOS 7 安裝配置LAMP服務器方法(Apache+PHP+MariaDB)

準備篇:php

1、配置防火牆,開啓80端口、3306端口html

CentOS 7 默認使用的是firewall做爲防火牆,這裏改成iptables防火牆。mysql

一、關閉firewall:linux

systemctl stop firewalld.service #中止firewall
systemctl disable firewalld.service #禁止firewall開機啓動

二、安裝iptables防火牆web

yum install iptables-services #安裝
vi /etc/sysconfig/iptables #編輯防火牆配置文件
# 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 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
:wq! #保存退出
systemctl restart iptables.service #最後重啓防火牆使配置生效
systemctl enable iptables.service #設置防火牆開機啓動

2、關閉SELINUXsql

vi /etc/selinux/config
#SELINUX=enforcing #註釋掉
#SELINUXTYPE=targeted #註釋掉
SELINUX=disabled #增長
:wq! #保存退出
setenforce 0 #使配置當即生效

安裝篇:shell

1、安裝Apache數據庫

yum install httpd #根據提示,輸入Y安裝便可成功安裝
systemctl start httpd.service #啓動apache
systemctl stop httpd.service #中止apache
systemctl restart httpd.service #重啓apache
systemctl enable httpd.service #設置apache開機啓動

2、安裝MariaDBapache

CentOS 7 中,已經使用MariaDB替代了MySQL數據庫瀏覽器

一、安裝MariaDB

yum install mariadb mariadb-server #詢問是否要安裝,輸入Y便可自動安裝,直到安裝完成
systemctl start mariadb.service #啓動MariaDB
systemctl stop mariadb.service #中止MariaDB
systemctl restart mariadb.service #重啓MariaDB
systemctl enable mariadb.service #設置開機啓動
cp /usr/share/mysql/my-huge.cnf /etc/my.cnf #拷貝配置文件(注意:若是/etc目錄下面默認有一個my.cnf,直接覆蓋便可)

二、爲root帳戶設置密碼

mysql_secure_installation

回車,根據提示輸入Y

輸入2次密碼,回車

根據提示一路輸入Y

最後出現:Thanks for using MySQL!

MySql密碼設置完成,從新啓動 MySQL:

systemctl restart mariadb.service #重啓MariaDB

3、安裝PHP

一、安裝PHP 和 php-devel工具 方便往後使用 phpize 作擴展編譯

yum install php php-devel #根據提示輸入Y直到安裝完成

二、安裝PHP組件,使PHP支持 MariaDB

yum install php-mysql php-gd libjpeg* php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-bcmath php-mhash

#這裏選擇以上安裝包進行安裝,根據提示輸入Y回車

systemctl restart mariadb.service #重啓MariaDB
systemctl restart httpd.service #重啓apache

配置篇

1、Apache配置

vi /etc/httpd/conf/httpd.conf #編輯文件

#添加,在錯誤頁中顯示Apache的版本,Off爲不顯示
ServerSignature On

#修改成:Options Includes ExecCGI FollowSymLinks(容許服務器執行CGI及SSI,禁止列出目錄)
Options Indexes FollowSymLinks

#修改成:AddHandler cgi-script .cgi .pl (容許擴展名爲.pl的CGI腳本運行)
AddHandler cgi-script .cgi

#修改成:AllowOverride All (容許.htaccess)
AllowOverride None

#修改成:AddDefaultCharset GB2312 (添加GB2312爲默認編碼)
AddDefaultCharset UTF-8

#修改成 Options FollowSymLinks(不在瀏覽器上顯示樹狀目錄結構)
Options Indexes FollowSymLinks

#修改成:DirectoryIndex index.html index.htm Default.html Default.htm index.php(設置默認首頁文件,增長index.php)
DirectoryIndex index.html

#添加MaxKeepAliveRequests 500 (增長同時鏈接數)
MaxKeepAliveRequests 500
:wq! #保存退出

 

systemctl restart httpd.service #重啓apache
rm -f /etc/httpd/conf.d/welcome.conf /var/www/error/noindex.html #刪除默認測試頁

2、php配置

vi /etc/php.ini #編輯
date.timezone = PRC #把前面的分號去掉,改成date.timezone = PRC
disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,escapeshellcmd,dll,popen,disk_free_space,checkdnsrr,checkdnsrr,getservbyname,getservbyport,disk_total_space,posix_ctermid,posix_get_last_error,posix_getcwd, posix_getegid,posix_geteuid,posix_getgid, posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid, posix_getppid,posix_getpwnam,posix_getpwuid, posix_getrlimit, posix_getsid,posix_getuid,posix_isatty, posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid, posix_setpgid,posix_setsid,posix_setuid,posix_strerror,posix_times,posix_ttyname,posix_uname
#列出PHP能夠禁用的函數,若是某些程序須要用到這個函數,能夠刪除,取消禁用。
expose_php = Off #禁止顯示php版本的信息
short_open_tag = ON #支持php短標籤
open_basedir = .:/tmp/  #設置表示容許訪問當前目錄(即PHP腳本文件所在之目錄)和/tmp/目錄,能夠防止php木馬跨站,若是改了以後安裝程序有問題(例如:織夢內容管理系統),能夠註銷此行,或者直接寫上程序的目錄/data/www.osyunwei.com/:/tmp/
:wq! #保存退出
systemctl restart mariadb.service #重啓MariaDB
systemctl restart httpd.service #重啓apache

測試篇

cd /var/www/html
vi index.php #輸入下面內容
<?php
phpinfo();
?>
:wq! #保存退出

注意:apache默認的程序目錄是/var/www/html

權限設置:chown -R apache:apache  /var/www/html

至此,CentOS 7.0安裝配置LAMP服務器(Apache+PHP+MariaDB)教程完成!

==========================================================================

我的補充

apache 虛擬主機 以及  mpm 模塊的參數設置

# Virtual Hosts
#
# Required modules: mod_log_config

# If you want to maintain multiple domains/hostnames on your
# machine you can setup VirtualHost containers for them. Most configurations
# use only name-based virtual hosts so the server doesn't need to worry about
# IP addresses. This is indicated by the asterisks in the directives below.
#
# Please see the documentation at
# <URL:http://httpd.apache.org/docs/2.4/vhosts/>
# for further details before you try to setup virtual hosts.
#
# You may use the command line option '-S' to verify your virtual host
# configuration.
Listen 8080
Listen 8081

#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for all requests that do not
# match a ServerName or ServerAlias in any <VirtualHost> block.
#
<VirtualHost *:8080>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "/var/www/web_admin"
    ServerName www.admin.com
    ServerAlias www.admin.com
    <Directory "/var/www/web_admin">
        Options FollowSymLinks
        #容許重寫 至關於加載 rewrite_mod
        AllowOverride All
        Require all granted
    </Directory>
    ErrorLog "/var/log/httpd/admin_error_log"
    CustomLog "/var/log/httpd/admin_access_log" common
</VirtualHost>

<VirtualHost *:8081>
    ServerAdmin webmaster@dummy-host.example.com
    DocumentRoot "/var/www/web_home"
    ServerName www.home.com
    ServerAlias www.home.com
    <Directory "/var/www/web_home">
        Options FollowSymLinks
        #容許重寫 至關於加載 rewrite_mod
        AllowOverride All
        Require all granted
    </Directory>
    #若是服務器上存在資源文件夾還能夠作這樣的限定
    <Directory "/var/www/web_home/images">
        #去掉 Indexs 能夠限制樹形羅列全部的 images 而只能根據全路徑訪問 限制資源目錄
        Options FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
    ErrorLog "/var/log/httpd/home_error_log"
    CustomLog "/var/log/httpd/home_access_log" common
</VirtualHost>

將文件保存爲 /etc/httpd/conf.d/httpd-vhosts.conf 便可

mpm爲apache的多線程管理模塊,是apache針對高併發的應用場景作的設置優化、

yum 安裝的 apache 並不能經過 httpd -l 來查看當前安裝的mpm模塊是什麼

咱們能夠  vi /etc/sysconfig/httpd 查看到 mpm 模塊的配置文件已經更到 /etc/httpd/conf.modules.d/00-mpm.conf 中,能夠經過此配置文件查看加載的mpm模式,默認爲 mod_mpm_prefork,同時咱們能夠對此模式進行參數設定

<IfModule mpm_prefork_module>
    StartServers            50
    MinSpareServers         20
    MaxSpareServers         10
    MaxRequestWorkers      300 #以前的版本爲 MaxClients
    ServerLimit            300
    MaxConnectionsPerChild   0
</IfModule>

mod_mpm_prefork 的配置,保存爲 /etc/httpd/conf.d/httpd-mpm.conf 便可

================================================================

因爲在日常的開發工做中,BeOS、NetWare、OS/2等操做系統並不常見,這裏咱們主要針對Windows和Unix/Linux操做系統上的MPM模塊進行講解。在Windows和Unix/Linux操做系統上,MPM模塊主要有mpm_winntmpm_preforkmpm_worker三種。

mpm_prefork模塊

mpm_prefork 模塊主要應用於Unix/Linux平臺的Apache服務器,其主要工做方式是:當Apache服務器啓動後,mpm_prefork模塊會預先建立多個子進程(默認爲5個),當接收到客戶端的請求後,mpm_prefork模塊再將請求轉交給子進程處理,而且每一個子進程同時只能用於處理單個請求。若是當前的請求數將超過預先建立的子進程數時,mpm_prefork模塊就會建立新的子進程來處理額外的請求。Apache老是試圖保持一些備用的或者是空閒的子進程用於迎接即將到來的請求。這樣客戶端的請求就不須要在接收後等候子進程的產生。

因爲在mpm_prefork模塊中,每一個請求對應一個子進程,所以其佔用的系統資源相對其餘兩種模塊而言較多。不過mpm_prefork模塊的優勢在於它的每一個子進程都會獨立處理對應的單個請求,這樣,若是其中一個請求出現問題就不會影響到其餘請求。同時,mpm_prefork模塊能夠應用於不具有線程安全的第三方模塊(好比PHP的非線程安全版本),且在不支持線程調試的平臺上易於調試。此外,mpm_prefork模塊還具備比mpm_worker模塊更高的穩定性。

mpm_worker模塊

mpm_worker模塊也主要應用於Unix/Linux平臺的Apache服務器,它能夠看做是mpm_prefork模塊的改進版。mpm_worker模塊的工做方式與mpm_prefork模塊相似。不過,因爲處理相同請求的狀況下,基於進程(例如mpm_prefork)比基於線程的處理方式佔用的系統資源要多。所以,與mpm_prefork模塊不一樣的是,mpm_worker模塊會讓每一個子進程建立固定數量的服務線程和一個監聽線程,並讓每一個服務線程來處理客戶端的請求,監聽線程用於監聽接入請求並將其傳遞給服務線程處理和應答。Apache老是試圖維持一個備用或是空閒的服務線程池。這樣,客戶端無須等待新線程或新進程的創建便可獲得處理。

mpm_prefork模塊相比,mpm_worker模塊能夠進一步減小系統資源的開銷。再加上它也使用了多進程,每一個進程又有多個線程,所以它與徹底基於線程的處理方式相比,又增長了必定的穩定性。

mpm_winnt模塊

mpm_winnt模塊是專門針對Windows操做系統而優化設計的MPM模塊。它只建立一個單獨的子進程,並在這個子進程中輪流產生多個線程來處理請求。

 

 

此時,咱們就須要根據當前Apache服務器所使用的MPM模塊,來修改對應<IfModule>節點下的參數配置。首先,咱們來看看mpm_winnt模塊下的默認配置:

#因爲mpm_winnt模塊只會建立1個子進程,所以這裏對單個子進程的參數設置就至關於對整個Apache的參數設置。

<IfModule mpm_winnt_module>
ThreadsPerChild      150 #推薦設置:小型網站=1000 中型網站=1000~2000 大型網站=2000~3500
MaxRequestsPerChild    0 #推薦設置:小=10000 中或大=20000~100000
</IfModule>

對應的配置參數做用以下:

ThreadsPerChild

每一個子進程的最大併發線程數。

MaxRequestsPerChild

每一個子進程容許處理的請求總數。若是累計處理的請求數超過該值,該子進程將會結束(而後根據須要肯定是否建立新的子進程),該值設爲0表示不限制請求總數(子進程永不結束)。

該參數建議設爲非零的值,能夠帶來如下兩個好處:

  1. 能夠防止程序中可能存在的內存泄漏無限進行下去,從而耗盡內存。
  2. 給進程一個有限壽命,從而有助於當服務器負載減輕的時候減小活動進程的數量。

注意:在以上涉及到統計請求數量的參數中,對於KeepAlive的鏈接,只有第一個請求會被計數。

接着,咱們再來看看mpm_perfork模塊和mpm_worker模塊下的默認配置:

#mpm_perfork模塊

<IfModule mpm_prefork_module>
StartServers          5 #推薦設置:小=默認 中=20~50 大=50~100
MinSpareServers       5 #推薦設置:與StartServers保持一致
MaxSpareServers      10 #推薦設置:小=20 中=30~80 大=80~120 
MaxClients          150 #推薦設置:小=500 中=500~1500 大型=1500~3000
MaxRequestsPerChild   0 #推薦設置:小=10000 中或大=10000~500000
(此外,還需額外設置ServerLimit參數,該參數最好與MaxClients的值保持一致。)
</IfModule>
#mpm_worker模塊

<IfModule mpm_worker_module>
StartServers          2 #推薦設置:小=默認 中=3~5 大=5~10
MaxClients          150 #推薦設置:小=500 中=500~1500 大型=1500~3000
MinSpareThreads      25 #推薦設置:小=默認 中=50~100 大=100~200
MaxSpareThreads      75 #推薦設置:小=默認 中=80~160 大=200~400 
ThreadsPerChild      25 #推薦設置:小=默認 中=50~100 大型=100~200
MaxRequestsPerChild   0 #推薦設置:小=10000 中或大=10000~50000
(此外,若是MaxClients/ThreadsPerChild大於16,還需額外設置ServerLimit參數,ServerLimit必須大於等於 MaxClients/ThreadsPerChild 的值。)
</IfModule>

對應的配置參數做用以下:

StartServers

啓動Apache時建立的子進程數。

MinSpareServers

處於空閒狀態的最小子進程數。

所謂空閒子進程是指沒有正在處理請求的子進程。若是當前空閒子進程數少於MinSpareServers,那麼Apache將以最大每秒一個的速度產生新的子進程。只有在很是繁忙機器上才須要調整這個參數。此值不宜過大。

MaxSpareServers

處於空閒狀態的最大子進程數。

只有在很是繁忙機器上才須要調整這個參數。此值不宜過大。若是你將該指令的值設置爲比MinSpareServers小,Apache將會自動將其修改爲MinSpareServers+1

MaxClients

容許同時鏈接的最大請求數量。

任何超過MaxClients限制的請求都將進入等待隊列,直到達到ListenBacklog指令限制的最大值爲止。

對於非線程型的MPM(也就是mpm_prefork),MaxClients表示能夠用於處理客戶端請求的最大子進程數量,默認值是256。要增大這個值,你必須同時增大ServerLimit

對於線程型或者混合型的MPM(也就是mpm_beosmpm_worker),MaxClients表示能夠用於處理客戶端請求的最大線程數量。線程型的mpm_beos的默認值是50。對於混合型的MPM默認值是16(ServerLimit)乘以25(ThreadsPerChild)的結果。所以要將MaxClients增長到超過16個進程才能提供的時候,你必須同時增長ServerLimit的值。

MinSpareThreads

處於空閒狀態的最小線程數。

不一樣的MPM對這個指令的處理是不同的:

mpm_worker的默認值是75。這個MPM將基於整個服務器監視空閒線程數。若是服務器中總的空閒線程數太少,子進程將產生新的空閒線程。mpm_netware的默認值是10。既然這個MPM只運行單獨一個子進程,此MPM固然亦基於整個服務器監視空閒線程數。mpm_beosmpmt_os2的工做方式與mpm_netware差很少,mpm_beos的默認值是1;mpmt_os2的默認值是5。

MaxSpareThreads

處於空閒狀態的最大線程數。

不一樣的MPM對這個指令的處理是不同的:

mpm_worker的默認值是250。這個MPM將基於整個服務器監視空閒線程數。若是服務器中總的空閒線程數太多,子進程將殺死多餘的空閒線程。mpm_netware的默認值是100。既然這個MPM只運行單獨一個子進程,此MPM固然亦基於整個服務器監視空閒線程數。mpm_beosmpmt_os2的工做方式與mpm_netware差很少,mpm_beos的默認值是50;mpmt_os2的默認值是10。

備註ServerLimit表示Apache容許建立的最大進程數。 值得注意的是,Apache在編譯時內部有一個硬限制ServerLimit 20000(對於mpm_prefork模塊爲ServerLimit 200000)。你不能超越這個限制。
使用這個指令時要特別小心。若是將ServerLimit設置成一個高出實際須要許多的值,將會有過多的共享內存被分配。若是將ServerLimitMaxClients設置成超過系統的處理能力,Apache可能沒法啓動,或者系統將變得不穩定。

注意:在配置相關參數時,請先保證服務器具有足夠的硬件性能(例如:CPU、內存等)。 若是發現自啓動後,隨着服務器的運行時間增長,服務器的內存佔用也隨之增長,多是程序中出現內存泄露,請向下調整參數MaxRequestsPerChild的值以下降內存泄露帶來的影響,而後儘快找出程序中的問題之所在。

詳細的能夠看這個

http://www.365mini.com/page/apache-concurrency-configuration.htm

相關文章
相關標籤/搜索