原貼:
CentOS3 Linux 伺服器環境配置最佳化詳解Wikipedia,自由的百科全書
目錄 [顯示隱藏] |
1 內容概要 1.1 CentOS3 安裝後的調整以及設定 1.2 升級OpenSSL和OpenSSH加強安全性 1.3 安裝配置Apache+PHP+MySQL+Zend Optimizer 1.4 更改Apache運行賬戶以及建立虛擬機器主機 1.5 伺服器最佳化 |
[編輯]
內容概要
本文詳細講述一台Linux伺服器系統安裝完畢後,從初步系統調整到安裝L.A.M.P環境再到伺服器最佳化、安全性原則等操作步驟,通過閱讀本文,您將能夠輕鬆快速的完成對 CentOS3 伺服器的環境配置!
1)本文包含如下主要內容:
- CentOS3 安裝後的調整以及設定
- 升級OpenSSL和OpenSSH加強安全性
- 安裝Apache+PHP+MySQL+Zend Optimizer環境
- 配置Apache以及建立虛擬機器主機
- 伺服器最佳化
- 伺服器iptables防火牆安全性原則定製參考
2)本文約定
- 下載的RPM包和源碼包存放位置:/usr/local/src
- MySQL 資料庫位置:/var/lib/mysql
- Apache 網站根目錄:/home/www/wwwroot
- Apache 運行賬戶:www:www
[編輯]
CentOS3 安裝後的調整以及設定
1. 檢查系統是否正常
# more /var/log/messages (檢查有無系統核心級錯誤(error)資訊) # dmesg (檢查有無硬體錯誤(error)資訊) # ifconfig(檢查網卡設定是否正確) # ping www.discuz.net (檢查網路是否正常)
2. 關閉不需要的服務
ntsysv
以下僅列出需要啟動的服務,未列出的服務一律可以關閉:
crond irqbalance (僅當伺服器CPU支援S.M.P-對稱多路處理器架構時才需開啟,
例如有2個或2個以上的CPU。否則關閉) microcode_ctl network random sendmail sshd syslog
3. 對TCP/IP網路參數進行調整,加強抗syn_flood能力
# echo 'net.ipv4.tcp_syncookies = 1' >> /etc/sysctl.conf # sysctl –p
4. 配置yum
1) rpm --import /usr/share/doc/centos-release-3/RPM-GPG-KEY-CentOS-3 2) yum list | tee /etc/yum.list
解釋:yum是一個功能強大的可以方便管理系統中RPM包的工具,使用yum可以通過網路免費升級、安裝系統中的RPM包,並且在升級安裝過程當中自動判斷解決依賴性問題,同時,也可以卸載刪除RPM包,詳細資料請參見Discuz!知識庫中Linux部分對yum的詳細介紹 (http://kb.discuz.com/index.php?title=%E4%BD%BF%E7%94%A8yum%E7%AE%A1%E7%90%86CentOS_RPM)
5. 安裝所需的RPM
在安裝前,請先使用 rpm -qa | grep NAME 檢查是否已經安裝了以下
的RPM包(將命令中的NAME替換為下列包名稱即可),如果系統顯示已經
安裝過該RPM包,則無需使用yum再次安裝! gcc gcc-c++ ntp flex bzip2-devel ncurses-devel libjpeg-devel libpng-devel libtiff-devel freetype-devel pam-devel perl-CGI perl-DBI zlib-devel yum install NAME (將NAME替換為上面列表中的RPM包名稱即可開始自動網路安裝)
6. 檢查系統時間並設定定期時間同步
1) date (確認系統時間是否正確) 2) ntpdate 210.72.145.44 (與中國國家授時中心進行時間校正) 3) crontab -e 加入一行任務,每隔30分鐘進行一次時間同步: */30 * * * * ntpdate 210.72.145.44 > /dev/null 2>&1
7. 重新啟動系統
init 6
8. 源碼編譯安裝環境所需的軟體
1) LibXML2
# cd /usr/local/src # wget http://download.discuz.net/env/libxml2-2.6.24.tar.bz2 # tar xjvf libxml2-2.6.24.tar.bz2 # cd libxml2-2.6.24 # ./configure --prefix=/usr/local/libxml2 # make # make install
2) GD2
# cd /usr/local/src # wget http://download.discuz.net/env/gd-2.0.33.tar.gz # tar xzvf gd-2.0.33.tar.gz # cd gd-2.0.33 # ./configure --prefix=/usr/local/gd2 --mandir=/usr/share/man # make # make install
[編輯]
升級OpenSSL和OpenSSH加強安全性
1) 升級OpenSSL
# cd /usr/local/src # wget http://download.discuz.net/env/openssl-0.9.7j.tar.gz # wget http://download.discuz.net/env/openssh-4.2p1.tar.gz # tar xzvf openssl-0.9.7j.tar.gz # cd openssl-0.9.7j # ./config --prefix=/usr/local/openssl # make # make test # make install # cd ..
2) 升級OpenSSH
# tar xzvf openssh-4.2p1.tar.gz # cd openssh-4.2p1 # ./configure --prefix=/usr --with-pam --with-zlib --with-ssl-
dir=/usr/local/openssl --with-md5-passwords --mandir=/usr/share/man # make # make install
3)禁止root直接登入,此處先建立一個普通系統使用者:
# useradd username # passwd username # vi /etc/passwd (將passwd檔案中username的登入shell改為/bin/sh) # vi /etc/ssh/sshd_config (將#protocol 1,2一行改為protocol 2) # vi /etc/ssh/sshd_config (將#PermitRootLogin yes一行改為PermitRootLogin no) # vi /usr/etc/sshd_config (將#protocol 1,2一行改為protocol 2) # vi /usr/etc/sshd_config (將#PermitRootLogin yes一行改為PermitRootLogin no) # /etc/rc.d/init.d/sshd restart
[編輯]
安裝配置Apache+PHP+MySQL+Zend Optimizer
1) 下載軟體
# cd /usr/local/src # wget http://download.discuz.net/env/httpd-2.0.58.tar.bz2 # wget http://download.discuz.net/env/mysql-standard-5.0.22-linux-i686.tar.gz # wget http://download.discuz.net/env/php-5.1.4.tar.bz2 # wget http://download.discuz.net/env/ZendOptimizer-3.0.1-linux-glibc21-i386.tar.gz
2) 安裝MySQL
# tar xzvf mysql-standard-5.0.22-linux-i686.tar.gz # useradd mysql # mv mysql-standard-5.0.22-linux-i686 /usr/local/mysql # cd /usr/local/mysql # scripts/mysql_install_db --user=mysql # chown -R root . # chown -R mysql data # chgrp -R mysql . # mv data /var/lib/mysql # ln -s /var/lib/mysql ./data # cp support-files/my-large.cnf /etc/my.cnf # bin/mysqld_safe --user=mysql & # bin/mysqladmin -u root password newpassword_for_root # bin/mysqladmin -u root -p shutdown # cp support-files/mysql.server /etc/init.d/mysqld # chkconfig --add mysqld # /etc/rc.d/init.d/mysqld start
3) 編譯安裝Apache
# cd /usr/local/src # tar xjvf httpd-2.0.58.tar.bz2 # cd httpd-2.0.58 # ./configure --prefix=/usr/local/apache2 --mandir=/usr/
share/man --enable-module=so --enable-deflate=shared
--enable-expires=shared --enable-rewrite=shared
--enable-gzip --enable-cache --enable-file-cache
--enable-mem-cache --enable-disk-cache # make # make install
4) 編譯安裝PHP
# cd /usr/local/src # tar xjvf php-5.1.4.tar.bz2 # cd php-5.1.4 # ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/
apache2/bin/apxs --with-zlib --with-bz2 --with-tiff-dir
--with-libxml-dir=/usr/local/libxml2 --with-gd=/usr/local/
gd2 --with-freetype-dir --with-jpeg-dir --with-png-dir
--with-ttf --enable-mbstring --with-mysql=/usr/local/mysql
--with-config-file-path=/etc --disable-ipv6 --enable-gd-
native-ttf # make # make install # cp php.ini-dist /etc/php.ini
5) 安裝Zend Optimizer
# cd /usr/local/src # tar xzvf ZendOptimizer-3.0.1-linux-glibc21-i386.tar.gz # ./ZendOptimizer-3.0.1-linux-glibc21-i386/install.sh
6) 整合Apache與PHP
# vi /usr/local/apache2/conf/httpd.conf
搜尋:
DirectoryIndex index.html index.html.var
將其改為:
DirectoryIndex index.html index.htm index.php
搜尋:
AddType application/x-gzip .gz .tgz
在下面添加一行:
AddType application/x-httpd-php .php
儲存退出後重啟Apache
# /usr/local/apache2/bin/apachectl restart
[編輯]
更改Apache運行賬戶以及建立虛擬機器主機
1. 更改Apache運行賬戶預設情況下Apache在Linux系統上使用nobody賬戶運行,我們下面將要更改運行賬戶提升Apache的安全性和許可權可控性。
# useradd www # su www $ mkdir -p /home/www/wwwroot/discuz $ exit # vi /usr/local/apache2/conf/httpd.conf
找到:
User nobody Group #-1
改為:
User www Group www
2. 建立一個虛擬機器主機此處我們為Apache建立一個虛擬機器主機。
# vi /usr/local/apache2/conf/httpd.conf
找到:
#NameVirtualHost *
去調前面的“#”號以開啟注釋,使用虛擬機器主機模式運行Apache。在該設定檔的末尾添加一個虛擬機器主機,且該虛擬機器主機記錄檔存放目錄為/home/www/logs
<VirtualHost *> ServerName www.your-domain.com DocumentRoot /home/www/wwwroot/discuz ErrorLog /home/www/logs/discuz-error_log CustomLog /home/www/logs/discuz-access_log combined # 建立Discuz!論壇所需的Rewrite規則 <IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^(.*)/archiver/([a-z0-9/-]+/.html)$ $1/archiver/index.php?$2 RewriteRule ^(.*)/forum-([0-9]+)-([0-9]+)/.html$ $1/forumdisplay.php?fid=$2&page=$3 RewriteRule ^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+)/.html$ $1/viewthread.php?tid=$2&extra=page/%3D$4&page=$3 RewriteRule ^(.*)/profile-(username|uid)-(.+)/.html$ $1/viewpro.php?$2=$3 </IfModule> </VirtualHost>
儲存並退出檔案編輯,下面建立日誌存放目錄:
# mkdir /home/www/logs
重新啟動Apache:
# /usr/local/apache2/bin/apachectl restart
至此,一個虛擬機器主機就建立好了!
[編輯]
伺服器最佳化
1. Apache最佳化
經過上述操作後,Apache已經能夠正常運行。但是,對於訪問量稍大的網站,Apache的這些預設配置是無法滿足需求的,我們仍需調整Apache的一些參數,使Apache能夠在大訪問量環境下發揮出更好的效能。以下我們對Apache設定檔httpd.conf中對效能影響較大的參數進行一些說明。
(1) Timeout 該參數指定Apache在接收請求或發送所請求內容之前的最長等待時間(秒),若超過該時間Apache則放棄處理該請求,並釋放串連。該參數預設值為120,推薦設定為60,對於訪問量較大的網站可以設定為30。
(2) KeepAlive 該參數控制Apache是否允許在一個串連中有多個請求,預設開啟。但對於大多數論壇類型網站來說,通常設定為off以關閉該支援。
(3) MPM - prefork.c 在預設情況下Apache使用Prefork(進程)工作模式,可以說這部分的參數設定是對Apache效能影響的核心和關鍵。使用者可以在配置文檔中找到以下配置段:
<IfModule prefork.c> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 15 MaxRequestsPerChild 0 </IfModule>
這就是控制Apache進程工作的配置段,為了更好的理解上述配置中的各項參數,下面讓我們先瞭解一下Apache是如何控制進程工作的。我們知道,在Unix系統中,很多服務(Service)的守護進程(Daemon)在啟動時會建立一個進程以準備應答可能的串連請求,服務即進入了連接埠監聽狀態,當一個來自用戶端(Client)的請求被發送至服務所監聽的連接埠時,該服務進程即會處理該請求,在處理過程中,該進程處於獨佔狀態,也就是說如果此時有其他請求到達,這些請求只能“排隊”等待當前請求處理完成且服務進程釋放。這樣就會導致越來越多的請求處於隊列等待狀態,實際表現就是該服務處理能力非常低下。Apache使用Prefork模式很好的解決了這一問題。下面我們來看看Apache實際上是如何高效率工作的。
當Apache啟動時,Apache會啟動StartSpareServers個空閑進程同時準備接收處理請求,當多個請求到來時,StarSpareServers進行會越來越少,當空閑進程減少到MinSpareServers個時,Apache為了能夠繼續有充裕的進程處理請求,它會再啟動StartsServers個進程備用,這樣就大大減少了請求隊列等待的可能,使得服務效率提高,這也是為什麼叫做Pre-fork的原因;讓我們繼續跟蹤Apache的工作,我們假設Apache已經啟動了200個進程來處理請求,理論上來說,此時Apache一共有205個進程,而過了一段時間,假設有100個請求都得到了Apache的響應和處理,那麼此時這100個進程就被釋放成為空白閑進程,那麼此時Apache有105個空閑進程。而對於服務而言,啟動太多的空閑進程時沒有任何意義的,反而會降低伺服器的整體效能,那麼Apache真的會有105個空閑進程嗎?當然不會!實際上Apache隨時在檢查自己,當發現有超過MaxSpareServers個空閑進程時,則會自動停止關閉一些進程,以保證空閑進程不過過多。說到這裡,使用者應該對Apache的工作方式有了一定的瞭解,如果想獲得更多更詳細的說明請參閱Apache手冊文檔。
我們還有兩個參數沒有介紹:MaxClients和MaxRequestPerchild;MaxClients指定Apache在同一時間內最多允許有多少用戶端能夠與其串連,如果超過MaxClients個串連,用戶端將會得到一個“伺服器繁忙”的錯誤頁面。我們看到預設情況下MaxClients設定為15,這對一些中型網站和大型網站顯然是遠遠不夠的!也許您需要同時允許512個用戶端串連才能滿足應用需求,好吧,那麼就讓我們把MaxClients修改為512,儲存httpd.conf並退出,重啟Apache,很遺憾,在重啟過程當中您看到了一些錯誤提示,Apache重啟失敗。錯誤提示中告訴您MaxClients最大隻能設定為256,相信您一定很失望。不過不要沮喪,Apache作為世界一流的Web Server一定不會如此單薄的!在預設情況下,MaxClients的確只能設定為不超過256的整數,但是,如果您有需要完全可以隨意定製,此時就需要使用ServerLimit參數來配合使用,簡單的說ServerLimit就像是水桶,而MaxClients就像是水,您可以通過更換更大的水桶(將ServerLimit設定為一個較大值)來容納更多的水(MaxClients),但要注意,MaxClients的設定數值是不能大於ServerLimit的設定數值的!
下面讓我們瞭解一下MaxRequestPerChild參數,該參數指定一個串連進程中可以有多少個線程同時工作。也許這樣解釋過於專業,那麼您只要想想“網路螞蟻”、“網際快車FlashGet”中的“多點同時下載”即可,該參數實際上就是限制最多可以用幾個“點”。預設設定為0,即為:不限制。但需要注意,如果將該值設定的過小會引起訪問問題,如果沒有特殊需要或者訪問量壓力並非很大可以保持預設值,如果訪問量很大則推薦設定為2048。
好了,解釋了這麼多,讓我們看看經過修改後Perfork.c配置段的推薦配置:
<IfModule prefork.c> StartServers 5 MinSpareServers 5 MaxSpareServers 10 ServerLimit 1024 MaxClients 768 MaxRequestsPerChild 0 </IfModule>
完成了上述對Apache的調整,Apache已經獲得了較大的效能改善。記住,在修改任何參數後都需要重啟Apache才會生效的。有關Apache的最佳化遠遠不止這些,有興趣的使用者可以閱讀Apache手冊文檔或者尋找一些文獻資料學習。
2. PHP最佳化對於PHP的最佳化主要是對php.ini中的相關主要參數進行合理調整和設定,以下我們就來看看php.ini中的一些對效能影響較大的參數應該如何設定。
# vi /etc/php.ini
(1) PHP函數禁用找到:
disable_functions =
該選項可以設定哪些PHP函數是禁止使用的,PHP中有一些函數的風險性還是相當大的,可以直接執行一些系統級指令碼命令,如果允許這些函數執行,當PHP程式出現漏洞時,損失是非常嚴重的!以下我們給出推薦的禁用函數設定:
disable_functions = phpinfo,passthru,exec,system,popen,
chroot,escapeshellcmd,escapeshellarg,shell_exec,proc_open,
proc_get_status
需注意:如果您的伺服器中含有一些系統狀態檢測的PHP程式,則不要禁用shell_exec,proc_open,proc_get_status等函數。
(2) PHP指令碼執行時間找到:
max_execution_time = 30
該選項設定PHP程式的最大執行時間,如果一個PHP指令碼被請求,且該PHP指令碼在max_execution_time時間內沒能執行完畢,則PHP不再繼續執行,直接給用戶端返回逾時錯誤。沒有特殊需要該選項可保持預設設定30秒,如果您的PHP指令碼確實需要長執行時間則可以適當增大該時間設定。
(3) PHP指令碼處理記憶體佔用找到:
memory_limit = 8M
該選項指定PHP指令碼處理所能佔用的最大記憶體,預設為8MB,如果您的伺服器記憶體為1GB以上,則該選項可以設定為12MB以獲得更快的PHP指令碼處理效率。
(4) PHP全域函式宣告找到:
register_globals = Off
網路上很多關於PHP設定的文章都推薦將該選項設定為On,其實這是一種及其危險的設定方法,很可能引起嚴重的安全性問題。如果沒有特殊的需要,強烈推薦保留預設設定!
(5) PHP上傳檔案大小限制找到:
upload_max_filesize = 2M
該選項設定PHP所能允許最大上傳檔案大小,預設為2MB。根據實際應用需求,可以適當增大該設定。
(6) Session儲存介質找到:
session.save_path
如果你的PHP程式使用Session對話,則可以將Session儲存位置設定為/dev/shm,/dev/shm是Linux系統專屬的TMPFS檔案系統,是以記憶體為主要儲存方式的檔案系統,比RAMDISK更優秀,因為可以使用DISKSWAP作為補充,而且是系統內建的功能模組,不需要另行配置。想想看,從磁碟IO操作到記憶體操作,速度會快多少?只是需要注意,儲存在/dev/shm的資料,在伺服器重啟後會全部丟失。不過這對於Session來說是無足輕重的。
3. MySQL最佳化
在Apache, PHP, MySQL的體系架構中,MySQL對於效能的影響最大,也是關鍵的核心部分。對於Discuz!論壇程式也是如此,MySQL的設定是否合理最佳化,直接影響到論壇的速度和承載量!同時,MySQL也是最佳化難度最大的一個部分,不但需要理解一些MySQL專業知識,同時還需要長時間的觀察統計並且根據經驗進行判斷,然後設定合理的參數。
下面我們瞭解一下MySQL最佳化的一些基礎,MySQL的最佳化我分為兩個部分,一是伺服器物理硬體的最佳化;二是MySQL自身(my.cnf)的最佳化。
(1) 伺服器硬體對MySQL效能的影響
a) 磁碟尋道能力(磁碟I/O),以目前高轉速SCSI硬碟(7200轉/秒)為例,這種硬碟理論上每秒尋道7200次,這是物理特性決定的,沒有辦法改變。MySQL每秒鐘都在進行大量、複雜的查詢操作,對磁碟的讀寫量可想而知。所以,通常認為磁碟I/O是制約MySQL效能的最大因素之一,對於日均訪問量在100萬PV以上的Discuz!論壇,由於磁碟I/O的制約,MySQL的效能會非常低下!解決這一制約因素可以考慮以下幾種解決方案:
- 使用RAID-0+1磁碟陣列,注意不要嘗試使用RAID-5,MySQL在RAID-5磁碟陣列上的效率不會像你期待的那樣快;
- 拋棄傳統的硬碟,使用速度更快的快閃記憶體式存放裝置。經過Discuz!公司技術工程的測試,使用快閃記憶體式存放裝置可比傳統硬碟速度高出6-10倍左右。
b) CPU 對於MySQL應用,推薦使用S.M.P.架構的多路對稱CPU,例如:可以使用兩顆Intel Xeon 3.6GHz的CPU。
c) 實體記憶體對於一台使用MySQL的Database Server來說,伺服器記憶體建議不要小於2GB,推薦使用4GB以上的實體記憶體。
(2) MySQL自身因素當解決了上述伺服器硬體制約因素後,讓我們看看MySQL自身的最佳化是如何操作的。對MySQL自身的最佳化主要是對其設定檔my.cnf中的各項參數進行最佳化調整。下面我們介紹一些對效能影響較大的參數。
由於my.cnf檔案的最佳化設定是與伺服器硬體設定息息相關的,因而我們指定一個假想的伺服器硬體環境:
- CPU: 2顆Intel Xeon 2.4GHz
- 記憶體: 4GB DDR
- 硬碟: SCSI 73GB
下面,我們根據以上硬體設定結合一份已經最佳化好的my.cnf進行說明:
# vi /etc/my.cnf
以下只列出my.cnf檔案中[mysqld]段落中的內容,其他段落內容對MySQL運行效能影響甚微,因而姑且忽略。
[mysqld] port = 3306 serverid = 1 socket = /tmp/mysql.sock skip-locking # 避免MySQL的外部鎖定,減少出錯幾率增強穩定性。 skip-name-resolve # 禁止MySQL對外部串連進行DNS解析,使用這一選項可以消除MySQL進行DNS解析的時間。
但需要注意,如果開啟該選項,則所有遠程主機串連授權都要使用IP地址方式,否則MySQL
將無法正常處理串連請求! back_log = 384 # 指定MySQL可能的串連數量。當MySQL主線程在很短的時間內接收到非常多的串連請求,
該參數生效,主線程花費很短的時間檢查串連並且啟動一個新線程。back_log
參數的值指出在MySQL暫時停止回應新請求之前的短時間內多少個請求可以被存在堆棧中。
如果系統在一個短時間內有很多串連,則需要增大該參數的值,該參數值指定到來的
TCP/IP串連的偵聽隊列的大小。不同的作業系統在這個隊列大小上有它自己的限制。
試圖設定back_log高於你的作業系統的限制將是無效的。預設值為50。對於Linux系統
推薦設定為小於512的整數。 key_buffer_size = 256M # key_buffer_size指定用於索引的緩衝區大小,增加它可得到更好的索引處理效能。對於
記憶體在4GB左右的伺服器該參數可設定為256M或384M。
注意:該參數值設定的過大反而會是伺服器整體效率降低! max_allowed_packet = 4M thread_stack = 256K table_cache = 128K sort_buffer_size = 6M # 查詢排序時所能使用的緩衝區大小。
注意:該參數對應的分配記憶體是每串連獨佔!如果有100個串連,那麼實際分配的總共排序緩衝
區大小為100 × 6 = 600MB。所以,對於記憶體在4GB左右的伺服器推薦設定為6-8M。 read_buffer_size = 4M # 讀查詢操作所能使用的緩衝區大小。和sort_buffer_size一樣,該參數對應的分配
記憶體也是每串連獨享! join_buffer_size = 8M # 聯集查詢操作所能使用的緩衝區大小,和sort_buffer_size一樣,該參數對應的分配
記憶體也是每串連獨享! myisam_sort_buffer_size = 64M table_cache = 512 thread_cache_size = 64 query_cache_size = 64M # 指定MySQL查詢緩衝區的大小。可以通過在MySQL控制台執行以下命令觀察: # > SHOW VARIABLES LIKE '%query_cache%'; # > SHOW STATUS LIKE 'Qcache%'; # 如果Qcache_lowmem_prunes的值非常大,則表明經常出現緩衝不夠的情況; # 如果Qcache_hits的值非常大,則表明查詢緩衝使用非常頻繁,如果該值較小反而會影響效率,
那麼可以考慮不用查詢緩衝;Qcache_free_blocks,如果該值非常大,則表明緩衝區中片段很多。 tmp_table_size = 256M max_connections = 768 # 指定MySQL允許的最大串連進程數。如果在訪問論壇時經常出現Too Many Connections的錯誤提
示,則需要增大該參數值。 max_connect_errors = 10000000 wait_timeout = 10 # 指定一個請求的最大連線時間,對於4GB左右記憶體的伺服器可以設定為5-10。 thread_concurrency = 8 # 該參數取值為伺服器邏輯CPU數量×2,在本例中,伺服器有2顆物理CPU,而每顆物理CPU又支援
H.T超執行緒,所以實際取值為4 × 2 = 8 skip-networking # 開啟該選項可以徹底關閉MySQL的TCP/IP串連方式,如果WEB伺服器是以遠端連線的方式訪問
MySQL資料庫伺服器則不要開啟該選項!否則將無法正常串連!
以上,我們對一份my.cnf做了簡單的說明,MySQL的最佳化是一項需要長期觀察,長期積累經驗,長期實驗的工作。有興趣的使用者可以邊查閱文檔資料邊做實驗,在實際應用中獲得更多的經驗的收穫。
最佳化部分至此就基本介紹完了,在所有最佳化操作完成後,需要重新啟動Apache和MySQL服務:
# /usr/local/apache2/bin/apachectl restart # /etc/rc.d/init.d/mysqld restart
六、伺服器iptables防火牆安全性原則定製參考對於Linux伺服器而言,使用iptables進行安全控制和包過濾是較好的選擇。該部分無意介紹iptables的使用方法,iptables的功能非常強大,有興趣的使用者可以在這裡 (http://www.netfilter.org)找到很多有關NetFilter/Iptables的資料。下面我們以一台裝有雙網卡的L.A.M.P伺服器為例,給出一個能夠滿足較為安全訪問需求的iptables指令碼。
伺服器雙網卡使用方式:
- eth0: 串連公網WAN
- eth1: 串連私網LAN
伺服器對公網WAN開放服務情況:
- FTP on TCP Port 21
- SSH on TCP Port 22
- SMTP on TCP Port 25
- HTTP on TCP Port 80
- POP on TCP Port 110
# vi /usr/local/sbin/fw.sh
將下面指令碼粘貼到fw.sh中:
#! /bin/bash # This Net-Filter script was create by Discuz! - Nanu. # Support: nanu@discuz.com # Set FTP Passive Transfer Mode /sbin/modprobe ip_conntrack_ftp /sbin/modprobe ip_nat_ftp # Initalize /sbin/iptables -F -t filter /sbin/iptables -F -t nat /sbin/iptables -P INPUT DROP /sbin/iptables -P OUTPUT ACCEPT /sbin/iptables -P FORWARD DROP # Enable Private Network lo & eth1 Access /sbin/iptables -A INPUT -i lo -j ACCEPT /sbin/iptables -A INPUT -i eth1 -j ACCEPT ################################# #### Server Security Settings ### ################################# # ICMP Control /sbin/iptables -A INPUT -p icmp -m limit --limit 1/s --limit-burst 10 -j ACCEPT # FTP Service /sbin/iptables -A INPUT -p tcp --dport 21 -j ACCEPT # SSH Service /sbin/iptables -A INPUT -p tcp --dport 22 -j ACCEPT # Mail Service /sbin/iptables -A INPUT -p tcp --dport 25 -j ACCEPT /sbin/iptables -A INPUT -p tcp --dport 110 -j ACCEPT # WWW Service /sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT # Deny Other Connections /sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
儲存完畢後,執行以下命令:
# chmod 755 /usr/local/sbin/fw.sh # echo '/usr/local/sbin/fw.sh' >> /etc/rc.local # /usr/local/sbin/fw.sh
查看當前iptables存取控制策略:
# iptables -L
至此,本文全部內容介紹完畢。如果您對本文有不清楚或者值得探討的地方,可以訪問Discuz!論壇進行討論。 http://www.discuz.net
取自"http://kb.discuz.net/index.php?title=CentOS3_Linux_%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%8E%AF%E5%A2%83%E9%85%8D%E7%BD%AE%E4%BC%98%E5%8C%96%E8%AF%A6%E8%A7%A3"