我本身已用vmware 3.5 basic 版 上線使用一年多...
基本上一些 應用上問題 自己也解決不少...其實不算太有需求找尋其他虛擬化軟體
但是xenserver這次 功能太誘人了
免費版差不多是全部完整功能了
http://www.citrix.com/English/ps2/products/feature.asp?contentID=1686939
上面link 比較圖
1.Live motion !!! =vmotion 動態搬遷 VM
2.多實體機管理..
3.VM樣版..
4.其他功能請參考上述Link
額外購買的Essentials for XenServer (好像還未定價)
1.HA
2.自動控制管理(實體機資源吃高時 自動會搬動VM到別機)
License 下載點
http://downloadns.citrix.com.edgesuite.net/akdlm/3849/XenServer-free-license.xslic
2009 .3.25 會推出申請free licnese 機制
企業版到 2009. 4.2x
XenServer 5 本體下ISO載點
http://downloadns.citrix.com.edgesuite.net/akdlm/3401/XenServer-5.0.0-install-cd.iso
Linux VM樣版和工具
http://downloadns.citrix.com.edgesuite.net/akdlm/3402/XenServer-5.0.0-linux-cd.iso
Xencenter Windows 控制軟體
http://downloadns.citrix.com.edgesuite.net/akdlm/3403/XenServer-5.0.0-XenCenter.msi
AMD T105 無陣列卡 無痛安裝完成...為之前正式版Xenserver 企業版 授權 之前在T105 裝ESX 快裝到快吐血
Mount ISO 請參考
http://wiki.osslab.org.tw/index.php?title=%E5%AF%A6%E9%A9%97%E5%B0%88%E6%A1%88/Virtualization/Citrix_XenServer/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8_iso_%E5%AE%89%E8%A3%9D_VM
開始寫不好的...
1.mount iso 不支源中文檔名 iso
2.第一次裝雨林木風版快速XP 完全不行..(VMware ESX 到正常的很) 用他win pe內 ghost 才可 .....
3.系統空間 3GB ..ISO 這樣一定不夠放......還是我安裝法不對? XD (安裝時不像esx 可自由分割空間)
後來發現正解 XEN 5可用Mount NFS or CIFS(網芳) 的ISO 目錄. 通常請準備一個NAS VM 內放ISO跟一些常用軟體方便
[root@tpexen /]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 3.8G 1.7G 2.0G 46% /
none 377M 0 377M 0% /dev/shm
[root@tpexen /]# mount
/dev/sda1 on / type ext3 (rw)
none on /proc type proc (rw)
none on /sys type sysfs (rw)
none on /dev/pts type devpts (rw)
none on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
[root@tpexen /]# uname -r
2.6.18-92.1.10.el5.xs5.0.0.394.644xen
XenServer VM內的 XP 效能.
實體效能對照
先說到此...Pools 試驗中
摘自:http://bbs.vmware.cn/thread-18763-1-1.html
2009年3月25日 星期三
2009年3月17日 星期二
[Linux]AWSTATS 安裝設定教學
AWStats是一套免費及功能強大的Log分析軟體產生報表。
官方網址 ( http://awstats.sourceforge.net/)
解壓縮 awstats-6.6.tar.gz(http://prdownloads.sourceforge.net/awstats/awstats-6.6.tar.gz)
# tar zxvf awstats-6.6.tar.gz
將解壓縮出來的 tools 及 wwwroot 目錄移至到 /usr/local/awstats 目錄下
切換目錄至 /usr/local/awstats 目錄
# cd /usr/local/awstats
執行 tools 目錄下的 awstats_configure.pl
#cd tool
#./awstats_configure.pl
設定config檔
----- AWStats awstats_configure 1.0 (build 1.6) (c) Laurent Destailleur -----
This tool will help you to configure AWStats to analyze statistics for
one web server. You can try to use it to let it do all that is possible
in AWStats setup, however following the step by step manual setup
documentation (docs/index.html) is often a better idea. Above all if:
- You are not an administrator user,
- You want to analyze downloaded log files without web server,
- You want to analyze mail or ftp log files instead of web log files,
- You need to analyze load balanced servers log files,
- You want to 'understand' all possible ways to use AWStats...
Read the AWStats documentation (docs/index.html).
-----> Running OS detected: Linux, BSD or Unix
-----> Check for web server install
Enter full config file path of your Web server.
Example: /etc/httpd/httpd.conf
Example: /usr/local/apache2/conf/httpd.conf
Example: c:\Program files\apache group\apache\conf\httpd.conf
Config file path ('none' to skip web server setup):
> /etc/httpd/conf/httpd.conf
-----> Check and complete web server config file '/etc/httpd/conf/httpd.conf'
Add 'Alias /awstatsclasses "/usr/local/awstats/wwwroot/classes/"'
Add 'Alias /awstatscss "/usr/local/awstats/wwwroot/css/"'
Add 'Alias /awstatsicons "/usr/local/awstats/wwwroot/icon/"'
Add 'ScriptAlias /awstats/ "/usr/local/awstats/wwwroot/cgi-bin/"'
Add '' directive
AWStats directives added to Apache config file.
-----> Update model config file '/usr/local/awstats/wwwroot/cgi-bin/awstats.mode l.conf'
File awstats.model.conf updated.
-----> Need to create a new config file ?
Do you want me to build a new AWStats config/profile
file (required if first install) [y/N] ?y
-----> Define config file name to create
What is the name of your web site or profile analysis ?
Example: www.mysite.com
Example: demo
Your web site, virtual server or profile name:
> 你的網站
-----> Define config file path
In which directory do you plan to store your config file(s) ?
Default: /etc/awstats
Directory path to store config file(s) (Enter for default):
>
-----> Create config file '/etc/awstats/awstats.你的網站.conf'
Config file /etc/awstats/awstats.你的網站.conf created.
-----> Restart Web server with '/sbin/service httpd restart'
停止 httpd: [ 確定 ]
啟動 httpd: [ 確定 ]
-----> Add update process inside a scheduler
Sorry, configure.pl does not support automatic add to cron yet.
You can do it manually by adding the following command to your cron:
/usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=www.nauticaltech.o rg
Or if you have several config files and prefer having only one command:
/usr/local/awstats/tools/awstats_updateall.pl now
Press ENTER to continue...
A SIMPLE config file has been created: /etc/awstats/awstats.你的網站 .conf
You should have a look inside to check and change manually main parameters.
You can then manually update your statistics for '你的網站' with com mand:
> perl awstats.pl -update -config=你的網站
You can also read your statistics for '你的網站' with URL:
> http://localhost/awstats/awstats.pl?config=你的網站
Press ENTER to finish...
以上步驟完成後,會在/etc/awstats目錄下建立一檔案- awstats.你的網站.conf
建立 /var/lib/awstats 目錄,並設定 777權限
#mkdir /var/lib/awstats
#chmod 777 /var/lib/awstats
檢查在httpd.conf中是否有以下設定,並且重新啟動httpd服務
# Directives to allow use of AWStats as a CGI
#
Alias /awstatsclasses "/usr/local/awstats/wwwroot/classes/"
Alias /awstatscss "/usr/local/awstats/wwwroot/css/"
Alias /awstatsicons "/usr/local/awstats/wwwroot/icon/"
ScriptAlias /awstats/ "/usr/local/awstats/wwwroot/cgi-bin/"
#
# This is to permit URL access to scripts/files in AWStats directory.
#
Options None
AllowOverride None
Order allow,deny
Allow from all
--------------------------
#service httpd restart
設定httpd的log format為combined,請編輯 httpd.conf,將CustomLog設定為combined
CustomLog logs/access_log combined
設定awstats.你的網站.conf
LogFile="/var/log/httpd/access_log" <----請指定apache log file的絕對路徑及log名稱
LogType=W <---- W分析類型為web log
LogFormat=1 <---- 1代表Apache or Lotus Notes/Domino native combined log format
SiteDomain="你的網站" <----指定定從log檔中過濾符合SiteDomain的記錄(不同的Virtual Domain就須指定為不同的SiteDomain)
HostAliases="你的網站"
設定完畢,請存檔
執行awstats.pl
# /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -config=你的網站 -update
如果出現以下訊息,就代表執行成功
Update for config "/etc/awstats/awstats.你的網站.conf"
With data in log file "/var/log/httpd/access_log.1"...
Phase 1 : First bypass old records, searching new record...
Direct access after last parsed record (after line 4311)
Jumped lines in file: 251
Found 4311 already parsed records.
Parsed lines in file: 0
Found 0 dropped records,
Found 0 corrupted records,
Found 0 old records,
Found 0 new qualified records.
開啟瀏覽器,輸入 http://你的網站/awstats/awstats.pl?config=你的網站,便可檢視你剛剛所產生的報表了。
將 /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -config=你的網站 -update的指令設定在crontab,讓它定期產生產生資料更新
這給大家參考一下 滿有用的
摘自:http://maizao.com/dz/thread-39-1-1.html
補充1:HOW TO ROTATE MY LOGS WITHOUT LOSING DATA
補充2:讓Awstats中搜尋的關鍵字正常顯示的方法!!]
AWStats分析報表中,有關搜尋的關鍵字句會變成亂碼的主因,是因為現在的搜尋引擎都是使用UTF8,而Awstats是使用Big5,所以在顯示上會出現亂碼。
要解決此問題,就是把awstats設定中的LoadPlugin="decodeutfkeys"啟動。就可以了
官方網址 ( http://awstats.sourceforge.net/)
解壓縮 awstats-6.6.tar.gz(http://prdownloads.sourceforge.net/awstats/awstats-6.6.tar.gz)
# tar zxvf awstats-6.6.tar.gz
將解壓縮出來的 tools 及 wwwroot 目錄移至到 /usr/local/awstats 目錄下
切換目錄至 /usr/local/awstats 目錄
# cd /usr/local/awstats
執行 tools 目錄下的 awstats_configure.pl
#cd tool
#./awstats_configure.pl
設定config檔
----- AWStats awstats_configure 1.0 (build 1.6) (c) Laurent Destailleur -----
This tool will help you to configure AWStats to analyze statistics for
one web server. You can try to use it to let it do all that is possible
in AWStats setup, however following the step by step manual setup
documentation (docs/index.html) is often a better idea. Above all if:
- You are not an administrator user,
- You want to analyze downloaded log files without web server,
- You want to analyze mail or ftp log files instead of web log files,
- You need to analyze load balanced servers log files,
- You want to 'understand' all possible ways to use AWStats...
Read the AWStats documentation (docs/index.html).
-----> Running OS detected: Linux, BSD or Unix
-----> Check for web server install
Enter full config file path of your Web server.
Example: /etc/httpd/httpd.conf
Example: /usr/local/apache2/conf/httpd.conf
Example: c:\Program files\apache group\apache\conf\httpd.conf
Config file path ('none' to skip web server setup):
> /etc/httpd/conf/httpd.conf
-----> Check and complete web server config file '/etc/httpd/conf/httpd.conf'
Add 'Alias /awstatsclasses "/usr/local/awstats/wwwroot/classes/"'
Add 'Alias /awstatscss "/usr/local/awstats/wwwroot/css/"'
Add 'Alias /awstatsicons "/usr/local/awstats/wwwroot/icon/"'
Add 'ScriptAlias /awstats/ "/usr/local/awstats/wwwroot/cgi-bin/"'
Add '' directive
AWStats directives added to Apache config file.
-----> Update model config file '/usr/local/awstats/wwwroot/cgi-bin/awstats.mode l.conf'
File awstats.model.conf updated.
-----> Need to create a new config file ?
Do you want me to build a new AWStats config/profile
file (required if first install) [y/N] ?y
-----> Define config file name to create
What is the name of your web site or profile analysis ?
Example: www.mysite.com
Example: demo
Your web site, virtual server or profile name:
> 你的網站
-----> Define config file path
In which directory do you plan to store your config file(s) ?
Default: /etc/awstats
Directory path to store config file(s) (Enter for default):
>
-----> Create config file '/etc/awstats/awstats.你的網站.conf'
Config file /etc/awstats/awstats.你的網站.conf created.
-----> Restart Web server with '/sbin/service httpd restart'
停止 httpd: [ 確定 ]
啟動 httpd: [ 確定 ]
-----> Add update process inside a scheduler
Sorry, configure.pl does not support automatic add to cron yet.
You can do it manually by adding the following command to your cron:
/usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=www.nauticaltech.o rg
Or if you have several config files and prefer having only one command:
/usr/local/awstats/tools/awstats_updateall.pl now
Press ENTER to continue...
A SIMPLE config file has been created: /etc/awstats/awstats.你的網站 .conf
You should have a look inside to check and change manually main parameters.
You can then manually update your statistics for '你的網站' with com mand:
> perl awstats.pl -update -config=你的網站
You can also read your statistics for '你的網站' with URL:
> http://localhost/awstats/awstats.pl?config=你的網站
Press ENTER to finish...
以上步驟完成後,會在/etc/awstats目錄下建立一檔案- awstats.你的網站.conf
建立 /var/lib/awstats 目錄,並設定 777權限
#mkdir /var/lib/awstats
#chmod 777 /var/lib/awstats
檢查在httpd.conf中是否有以下設定,並且重新啟動httpd服務
# Directives to allow use of AWStats as a CGI
#
Alias /awstatsclasses "/usr/local/awstats/wwwroot/classes/"
Alias /awstatscss "/usr/local/awstats/wwwroot/css/"
Alias /awstatsicons "/usr/local/awstats/wwwroot/icon/"
ScriptAlias /awstats/ "/usr/local/awstats/wwwroot/cgi-bin/"
#
# This is to permit URL access to scripts/files in AWStats directory.
#
Options None
AllowOverride None
Order allow,deny
Allow from all
--------------------------
#service httpd restart
設定httpd的log format為combined,請編輯 httpd.conf,將CustomLog設定為combined
CustomLog logs/access_log combined
設定awstats.你的網站.conf
LogFile="/var/log/httpd/access_log" <----請指定apache log file的絕對路徑及log名稱
LogType=W <---- W分析類型為web log
LogFormat=1 <---- 1代表Apache or Lotus Notes/Domino native combined log format
SiteDomain="你的網站" <----指定定從log檔中過濾符合SiteDomain的記錄(不同的Virtual Domain就須指定為不同的SiteDomain)
HostAliases="你的網站"
設定完畢,請存檔
執行awstats.pl
# /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -config=你的網站 -update
如果出現以下訊息,就代表執行成功
Update for config "/etc/awstats/awstats.你的網站.conf"
With data in log file "/var/log/httpd/access_log.1"...
Phase 1 : First bypass old records, searching new record...
Direct access after last parsed record (after line 4311)
Jumped lines in file: 251
Found 4311 already parsed records.
Parsed lines in file: 0
Found 0 dropped records,
Found 0 corrupted records,
Found 0 old records,
Found 0 new qualified records.
開啟瀏覽器,輸入 http://你的網站/awstats/awstats.pl?config=你的網站,便可檢視你剛剛所產生的報表了。
將 /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -config=你的網站 -update的指令設定在crontab,讓它定期產生產生資料更新
這給大家參考一下 滿有用的
摘自:http://maizao.com/dz/thread-39-1-1.html
補充1:HOW TO ROTATE MY LOGS WITHOUT LOSING DATA
/usr/local/apache/logs/*log
{
notifempty
daily
rotate 7
compress
sharedscripts
prerotate
/usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=mydomainconfig
endscript
postrotate
/usr/bin/killall -HUP httpd
endscript
}
補充2:讓Awstats中搜尋的關鍵字正常顯示的方法!!]
AWStats分析報表中,有關搜尋的關鍵字句會變成亂碼的主因,是因為現在的搜尋引擎都是使用UTF8,而Awstats是使用Big5,所以在顯示上會出現亂碼。
要解決此問題,就是把awstats設定中的LoadPlugin="decodeutfkeys"啟動。就可以了
# Plugin: DecodeUTFKeys
# Perl modules required: Encode and URI::Escape
# Allow AWStats to show correctly (in language charset) keywords/keyphrases
# strings even if they were UTF8 coded by the referer search engine.
#
LoadPlugin="decodeutfkeys"
2009年3月16日 星期一
squid 優化(解釋篇)
Squid 在高負載下,需要大量的內核資源。特別的,你需要給你的系統組態比正常情況更高的檔描述符和緩存。檔描述符的限制通常很惱人。你最好在開始編譯squid 之前來增加這些限制的大小。
1. 檔描述符
檔描述符是一個簡單的整數,用以標明每一個被進程所打開的檔和socket。第一個打開的檔是0,第二個是1,依此類推。Unix 作業系統通常給每個進程能打開的檔數量強加一個限制。更甚的是,unix 通常有一個系統級的限制。
因 為squid 的工作方式,檔描述符的限制可能會極大的影響性能。當squid 用完所有的檔描述符後,它不能接收用戶新的連接。也就是說,用完檔描述符導致拒絕服務。直到一部分當前請求完成,相應的檔和socket 被關閉,squid 不能接收新請求。當squid發現檔描述符短缺時,它會發佈警告。
通常情況下,Squid 預設為1024個檔描述,一般情況已經夠用。當系同高度繁忙時,肯能會用到4096個或更大。在編譯 Squid 前推薦將描述符更改至,系統限制級別的 2~3倍。
在linux系統下使用 ulimit -n 命令查看當前系統定義的檔描述符數量。
shell> ulimit -n
編譯修改/usr/include/bits/typesizes.h 標頭檔內的__FD_SETSIZE 值
#define __FD_SETSIZE 65536
使用ulimit -Hn 命令增加Kernel對檔描述符的限制,不必重啟機器
shell> echo 65536 > /proc/sys/fs/file-max
shell> ulimit -Hn 65536
2. 臨時埠號
臨時埠是TCP/IP 棧分配給出去連接的本地埠。換句話說,當squid 發起一條連接到另一台伺服器,內核給本地socket 分配一個埠號。這些本地埠號有特定的範圍限制。
臨時埠號短缺,對繁忙的Squid Server(每秒數百個連結)影響很大,當埠號不夠
用過時連結會進入 TIME_WAIT 狀態。在調試 Squid 時需要使用命令
shell> netstat -an |grep TIME_WAIT
在linux系統上,增加可用的臨時埠號(如:1024~44444)
shell> echo "1024 40000" >/proc/sys/net/ipv4/ip_local_port_range
3.configure Squid
./configure
--prefix=/usr/local/squid
--enable-epoll
--enable-storeio=aufs,diskd,ufs
--enable-async-io
--with-aufs-threads="N_thread"(多少執行緒工作)
--enable-removal-policies="LIST"(2.5為3種排除機制)
注:一下參數僅為參考,實際情況要根據Squid 版本來操作!
./configure 腳本有大量的不同選項,它們以-開始。當你敲入./configure --help 時,能看到選項的完整清單。一些選項對所有configure 腳本是通用的,還有一些是squid 專有的。下面是你可能用得到的標準選項:
--perfix =PREFIX
如前面描述的一樣,這裡設置安裝目錄。安裝目錄是所有可執行檔,日誌,和設定檔的預設目錄。在整本書中,$prefix 指你選擇的安裝目錄。
--localstatedir =DIR
該選項允許你改變var 目錄的安裝位置。默認是$prefix/var,但也許你想改變它,以使squid 的磁片緩存和日誌檔被存儲在別的地方。
--sysconfdir =DIR
該選項允許你改變etc 目錄的位置。默認的是$prefix/etc。假如你想使用/usr 作為安裝位置,你也許該配置--sysconfdir為/etc.
3-1. 以下是squid 的專有./configure選項:
--enable-dlmalloc[=LIB]
在 一些系統上,內建的記憶體分配機制(malloc)在使用squid 時表現不盡人意。使用--enable-dlmalloc 選項將squid 原始程式碼包中的dlmalloc 包編譯和連結進來。假如你的系統中已安裝dlmalloc,你能使用=LIB 參數指定庫的路徑。請見http://g.oswego.edu/dl/html/malloc.html更多關於dlmalloc 的資訊。
--enable-gnuregex
在 存取控制清單和其他配置指令裡,squid 使用規則運算式作為匹配機制。GNU 的規則運算式庫包含在squid 的原始程式碼包裡;它可以在沒有內建規則運算式的作業系統中使用。./configure腳本偵察你系統中的規則運算式庫,假如必要,它可以啟動使用GNU正 則運算式。如果因為某些理由,你想強制使用GNU規則運算式,你可以將這個選項加到./configure命令後。
--enable-carp
Cache陣列路由式通訊協定(CARP)用來轉發丟失的cache到父cache的陣列或cluster。在10.9章有更多關於CARP的細節。
--enable-async-io[=N_THREADS]
同 步I/O 是squid 技術之一,用以提升存儲性能。aufs 模組使用大量的執行緒來執行磁片I/O 操作。該代碼僅僅工作在linux 和solaris 系統中。=N_THREADS 參數改變squid 使用的執行緒數量。aufs 和同步I/O 在8.4 章中被討論。
請注意--enable-async-io 是打開其他三個./configure 選項的快捷方式,它等同於:
--with-aufs-threads=N_THREADS
--with-pthreads
--enable-storeio=ufs,aufs
--with-pthreads
該選項導致編譯過程連結到你系統中的P 執行緒庫。aufs 存儲模組是squid 中唯一需要使用執行緒的部分。通常來說,如果你使用--enable-saync-io 選項,那麼不必再單獨指定該選項,因為它被自動啟動了。
--enable-storeio=LIST
Squid 支援大量的不同存儲模組。通過使用該選項,你告訴squid 編譯時使用哪個模組。在squid-2.5 中,支持ufs,aufs,diskd,和null 模組。通過查詢src/fs 中的目錄,你能得到一個模組清單。LIST 是一個以逗號分隔的模組清單,例如:
% ./configure --enable-storeio=afus,diskd,ufs
ufs 模組是預設的,看起來問題最少。不幸的是,它性能有限。其他模組可能在某些作業系統中不必編譯。關於squid 存儲模組的完整描述,請見第8章。
--with-aufs-threads=N_THREADS
指定aufs 存儲機制使用的執行緒數量(見8.4章)。squid 預設根據緩存目錄的數量,自動計算需要使用多少執行緒。
--enable-heap-replacement
該選項不再使用,但被保留用於向後相容性。你該使用--enable-removal-policies 來代替。
--enable-removal-policies=LIST
排除策略是squid 需要騰出空間給新的cache目標時,用以排除舊目標的機制。squid-2.5支援3個排除策略:最少近期使用(LRU),貪婪對偶大小(GDS),最少經常使用(LFU)。
然而,因為一些理由,./configure 選項使指定的替代策略和需要執行它們的基本資料結構之間的差別模糊化。LRU是預設的,它以雙鏈表資料結構執行。GDS和LFU使用堆疊的資料結構。
為了使用GDS 或LFU 策略,你指定:
% ./configure --enable-removal-policies=heap
然後你在squid 的設定檔裡選擇使用GDS或LFU。假如你想重新使用LRU,那麼指定:
% ./configure --enable-removal-policies=heap,lru
更多的關於替換策略的細節請見7.5 章。
--enable-icmp
如在10.5 章中描述的一樣,squid 能利用ICMP消息來確定回環時間尺寸,非常象ping程式。你能使用該選項來啟動這些功能。
--enable-delay-pools
延時池是squid 用於傳輸形狀或頻寬限制的技術。該池由大量的用戶端IP 位址組成。當來自這些用戶端的請求處於cache 丟失狀態,他們的回應可能被人工延遲。關於延時池的更多細節請見附錄C。
--enable-useragent-log
該選項啟動來自客戶請求的HTTP 使用者代理頭的日誌。更多細節請見13.5 章。
--enable-referer-log
該選項啟動來自客戶請求的HTTP referer 日誌。更多細節請見13.4 章。
--disable-wccp
Web cache 協調協議(WCCP)是CISCO 的專有協議,用於阻止或分發HTTP 請求到一個或多個caches。WCCP默認被啟動,假如你願意,可以使用該選項來禁止該功能。
摘自:http://www.91linux.com/html/article/guanli/20081213/14672.html
1. 檔描述符
檔描述符是一個簡單的整數,用以標明每一個被進程所打開的檔和socket。第一個打開的檔是0,第二個是1,依此類推。Unix 作業系統通常給每個進程能打開的檔數量強加一個限制。更甚的是,unix 通常有一個系統級的限制。
因 為squid 的工作方式,檔描述符的限制可能會極大的影響性能。當squid 用完所有的檔描述符後,它不能接收用戶新的連接。也就是說,用完檔描述符導致拒絕服務。直到一部分當前請求完成,相應的檔和socket 被關閉,squid 不能接收新請求。當squid發現檔描述符短缺時,它會發佈警告。
通常情況下,Squid 預設為1024個檔描述,一般情況已經夠用。當系同高度繁忙時,肯能會用到4096個或更大。在編譯 Squid 前推薦將描述符更改至,系統限制級別的 2~3倍。
在linux系統下使用 ulimit -n 命令查看當前系統定義的檔描述符數量。
shell> ulimit -n
編譯修改/usr/include/bits/typesizes.h 標頭檔內的__FD_SETSIZE 值
#define __FD_SETSIZE 65536
使用ulimit -Hn 命令增加Kernel對檔描述符的限制,不必重啟機器
shell> echo 65536 > /proc/sys/fs/file-max
shell> ulimit -Hn 65536
2. 臨時埠號
臨時埠是TCP/IP 棧分配給出去連接的本地埠。換句話說,當squid 發起一條連接到另一台伺服器,內核給本地socket 分配一個埠號。這些本地埠號有特定的範圍限制。
臨時埠號短缺,對繁忙的Squid Server(每秒數百個連結)影響很大,當埠號不夠
用過時連結會進入 TIME_WAIT 狀態。在調試 Squid 時需要使用命令
shell> netstat -an |grep TIME_WAIT
在linux系統上,增加可用的臨時埠號(如:1024~44444)
shell> echo "1024 40000" >/proc/sys/net/ipv4/ip_local_port_range
3.configure Squid
./configure
--prefix=/usr/local/squid
--enable-epoll
--enable-storeio=aufs,diskd,ufs
--enable-async-io
--with-aufs-threads="N_thread"(多少執行緒工作)
--enable-removal-policies="LIST"(2.5為3種排除機制)
注:一下參數僅為參考,實際情況要根據Squid 版本來操作!
./configure 腳本有大量的不同選項,它們以-開始。當你敲入./configure --help 時,能看到選項的完整清單。一些選項對所有configure 腳本是通用的,還有一些是squid 專有的。下面是你可能用得到的標準選項:
--perfix =PREFIX
如前面描述的一樣,這裡設置安裝目錄。安裝目錄是所有可執行檔,日誌,和設定檔的預設目錄。在整本書中,$prefix 指你選擇的安裝目錄。
--localstatedir =DIR
該選項允許你改變var 目錄的安裝位置。默認是$prefix/var,但也許你想改變它,以使squid 的磁片緩存和日誌檔被存儲在別的地方。
--sysconfdir =DIR
該選項允許你改變etc 目錄的位置。默認的是$prefix/etc。假如你想使用/usr 作為安裝位置,你也許該配置--sysconfdir為/etc.
3-1. 以下是squid 的專有./configure選項:
--enable-dlmalloc[=LIB]
在 一些系統上,內建的記憶體分配機制(malloc)在使用squid 時表現不盡人意。使用--enable-dlmalloc 選項將squid 原始程式碼包中的dlmalloc 包編譯和連結進來。假如你的系統中已安裝dlmalloc,你能使用=LIB 參數指定庫的路徑。請見http://g.oswego.edu/dl/html/malloc.html更多關於dlmalloc 的資訊。
--enable-gnuregex
在 存取控制清單和其他配置指令裡,squid 使用規則運算式作為匹配機制。GNU 的規則運算式庫包含在squid 的原始程式碼包裡;它可以在沒有內建規則運算式的作業系統中使用。./configure腳本偵察你系統中的規則運算式庫,假如必要,它可以啟動使用GNU正 則運算式。如果因為某些理由,你想強制使用GNU規則運算式,你可以將這個選項加到./configure命令後。
--enable-carp
Cache陣列路由式通訊協定(CARP)用來轉發丟失的cache到父cache的陣列或cluster。在10.9章有更多關於CARP的細節。
--enable-async-io[=N_THREADS]
同 步I/O 是squid 技術之一,用以提升存儲性能。aufs 模組使用大量的執行緒來執行磁片I/O 操作。該代碼僅僅工作在linux 和solaris 系統中。=N_THREADS 參數改變squid 使用的執行緒數量。aufs 和同步I/O 在8.4 章中被討論。
請注意--enable-async-io 是打開其他三個./configure 選項的快捷方式,它等同於:
--with-aufs-threads=N_THREADS
--with-pthreads
--enable-storeio=ufs,aufs
--with-pthreads
該選項導致編譯過程連結到你系統中的P 執行緒庫。aufs 存儲模組是squid 中唯一需要使用執行緒的部分。通常來說,如果你使用--enable-saync-io 選項,那麼不必再單獨指定該選項,因為它被自動啟動了。
--enable-storeio=LIST
Squid 支援大量的不同存儲模組。通過使用該選項,你告訴squid 編譯時使用哪個模組。在squid-2.5 中,支持ufs,aufs,diskd,和null 模組。通過查詢src/fs 中的目錄,你能得到一個模組清單。LIST 是一個以逗號分隔的模組清單,例如:
% ./configure --enable-storeio=afus,diskd,ufs
ufs 模組是預設的,看起來問題最少。不幸的是,它性能有限。其他模組可能在某些作業系統中不必編譯。關於squid 存儲模組的完整描述,請見第8章。
--with-aufs-threads=N_THREADS
指定aufs 存儲機制使用的執行緒數量(見8.4章)。squid 預設根據緩存目錄的數量,自動計算需要使用多少執行緒。
--enable-heap-replacement
該選項不再使用,但被保留用於向後相容性。你該使用--enable-removal-policies 來代替。
--enable-removal-policies=LIST
排除策略是squid 需要騰出空間給新的cache目標時,用以排除舊目標的機制。squid-2.5支援3個排除策略:最少近期使用(LRU),貪婪對偶大小(GDS),最少經常使用(LFU)。
然而,因為一些理由,./configure 選項使指定的替代策略和需要執行它們的基本資料結構之間的差別模糊化。LRU是預設的,它以雙鏈表資料結構執行。GDS和LFU使用堆疊的資料結構。
為了使用GDS 或LFU 策略,你指定:
% ./configure --enable-removal-policies=heap
然後你在squid 的設定檔裡選擇使用GDS或LFU。假如你想重新使用LRU,那麼指定:
% ./configure --enable-removal-policies=heap,lru
更多的關於替換策略的細節請見7.5 章。
--enable-icmp
如在10.5 章中描述的一樣,squid 能利用ICMP消息來確定回環時間尺寸,非常象ping程式。你能使用該選項來啟動這些功能。
--enable-delay-pools
延時池是squid 用於傳輸形狀或頻寬限制的技術。該池由大量的用戶端IP 位址組成。當來自這些用戶端的請求處於cache 丟失狀態,他們的回應可能被人工延遲。關於延時池的更多細節請見附錄C。
--enable-useragent-log
該選項啟動來自客戶請求的HTTP 使用者代理頭的日誌。更多細節請見13.5 章。
--enable-referer-log
該選項啟動來自客戶請求的HTTP referer 日誌。更多細節請見13.4 章。
--disable-wccp
Web cache 協調協議(WCCP)是CISCO 的專有協議,用於阻止或分發HTTP 請求到一個或多個caches。WCCP默認被啟動,假如你願意,可以使用該選項來禁止該功能。
摘自:http://www.91linux.com/html/article/guanli/20081213/14672.html
squid安裝與設定
squid安裝
squid.conf設定
http_port 192.168.0.2:80 accel vhost vport
acl localhost src 127.0.0.1/32
acl localnet src 10.0.0.0/8
acl localnet src 172.16.0.0/12
acl localnet src 192.168.0.0/16
acl Safe_ports port 80 443
acl SSL_ports port 443
acl direct_ports port 80
acl manager proto cache_object
acl QUERY urlpath_regex cgi-bin \? \.jsp \.php
acl CONNECT method CONNECT
#acl allowed_urls dstdomain
# 使用的domain
acl denyssl url_regex -i ^https://
##acl allowed_urls dstdomain .mydomain.com.tw
acl allowed_urls dstdomain .urcosme.com
acl Mylog dstdomain urcosme.com
strip_query_terms on
logformat combined %>a %ui %un [%{%d/%b/%Y:%H:%M:%S +0800}tl] "%rm %rp HTTP/%rv" %Hs %h" "%{User-Agent}>h"
access_log /var/log/squid/access_mydomain_com_tw.log combined Mylog
#cgi-bin 不去 cache
hierarchy_stoplist cgi-bin ?
#refer to ACL
cache deny QUERY
cache deny denyssl
#允許(或拒絕)存取
#acl manager proto cache_object
http_access allow manager all
#http_access deny manager
#acl Safe_ports port 80 443
http_access deny !Safe_ports
#acl CONNECT method CONNECT
http_access deny CONNECT !SSL_ports
#acl allowed_urls dstdomain .mydomain.com.tw
http_access allow allowed_urls
http_access deny all
#預設deny的畫面
deny_info http://www.info.com.tw all
#proxy 和proxy預設的通訓
icp_access allow localnet
htcp_access allow localnet
always_direct allow direct_ports all
#Cache 儲存的設定
#非 hot object不儲存
cache_dir null /tmp
#hot object儲存的設定(放在記憶體)
cache_mem 500 MB
maximum_object_size_in_memory 400 KB
request_header_max_size 100 KB
#預設設定
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
#cache manager 帳號密碼設定
cache_mgr 帳號@mydomain
cachemgr_passwd 密碼 localnet
#預設設定
cache_log /var/log/squid/cache.log
coredump_dir /usr/local/squid/var/cache
cache_store_log none
relaxed_header_parser on
client_persistent_connections off
server_persistent_connections on
via off
reply_header_access X-Cache deny all
refresh_all_ims on
/etc/hosts
[webserverIP] [webserverDomain]
啟動
將下列這段加入 /etc/rc.local
##### Start Service #####
/opt/scripts/squid.sh init
sleep 3
/opt/scripts/squid.sh start
sleep 3
#########################
/opt/scripts/squid.sh
內容如下
cachemgr
squid/etc/cachemgr.conf
內容如下:
192.168.0.2:80
將squid/libexec/cachemgr.cgi 複製到apache的cgi-bin 底下
將apache listen port 改掉,不要與squid 相衝突.
將squid & apache 重起即可
httpd.conf
Listen 8080
AllowOverride None
Options None
Order allow,deny
Allow from all
#wget
http://www.squid-cache.org/Versions/v3/3.0/squid-3.0.STABLE13.tar.gz
# cd /usr/local/src
# tar -zxvf squid-3.0.STABLE13.tar.gz
# cd squid-3.0.STABLE13
#./configure --prefix=/usr/local/squid --enable-inline --enable-storeio=null --enable-delay-pools --enable-esi --enable-useragent-log --enable-referer-log --enable-kill-parent-hack --enable-arp-acl --enable-default-err-language=Traditional_Chinese --disable-poll --disable-select --enable-epoll --disable-ident-lookups --enable-default-hostsfile=/etc/hosts --enable-cpu-profiling --enable-x-accelerator-vary --with-default-user=nobody --with-aufs-threads=32 --with-large-files --with-filedescriptors=65536 --enable-http-violations --enable-removal-policies=heap,lru --enable-ssl
#make && make install
squid.conf設定
http_port 192.168.0.2:80 accel vhost vport
acl localhost src 127.0.0.1/32
acl localnet src 10.0.0.0/8
acl localnet src 172.16.0.0/12
acl localnet src 192.168.0.0/16
acl Safe_ports port 80 443
acl SSL_ports port 443
acl direct_ports port 80
acl manager proto cache_object
acl QUERY urlpath_regex cgi-bin \? \.jsp \.php
acl CONNECT method CONNECT
#acl allowed_urls dstdomain
# 使用的domain
acl denyssl url_regex -i ^https://
##acl allowed_urls dstdomain .mydomain.com.tw
acl allowed_urls dstdomain .urcosme.com
acl Mylog dstdomain urcosme.com
strip_query_terms on
logformat combined %>a %ui %un [%{%d/%b/%Y:%H:%M:%S +0800}tl] "%rm %rp HTTP/%rv" %Hs %
access_log /var/log/squid/access_mydomain_com_tw.log combined Mylog
#cgi-bin 不去 cache
hierarchy_stoplist cgi-bin ?
#refer to ACL
cache deny QUERY
cache deny denyssl
#允許(或拒絕)存取
#acl manager proto cache_object
http_access allow manager all
#http_access deny manager
#acl Safe_ports port 80 443
http_access deny !Safe_ports
#acl CONNECT method CONNECT
http_access deny CONNECT !SSL_ports
#acl allowed_urls dstdomain .mydomain.com.tw
http_access allow allowed_urls
http_access deny all
#預設deny的畫面
deny_info http://www.info.com.tw all
#proxy 和proxy預設的通訓
icp_access allow localnet
htcp_access allow localnet
always_direct allow direct_ports all
#Cache 儲存的設定
#非 hot object不儲存
cache_dir null /tmp
#hot object儲存的設定(放在記憶體)
cache_mem 500 MB
maximum_object_size_in_memory 400 KB
request_header_max_size 100 KB
#預設設定
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
#cache manager 帳號密碼設定
cache_mgr 帳號@mydomain
cachemgr_passwd 密碼 localnet
#預設設定
cache_log /var/log/squid/cache.log
coredump_dir /usr/local/squid/var/cache
cache_store_log none
relaxed_header_parser on
client_persistent_connections off
server_persistent_connections on
via off
reply_header_access X-Cache deny all
refresh_all_ims on
/etc/hosts
[webserverIP] [webserverDomain]
啟動
將下列這段加入 /etc/rc.local
##### Start Service #####
/opt/scripts/squid.sh init
sleep 3
/opt/scripts/squid.sh start
sleep 3
#########################
/opt/scripts/squid.sh
內容如下
#!/bin/sh
SQUID_PID=`ps aux | grep squid | grep -v grep | awk '{print $2}'`
case $1 in
start)
mkdir -p /usr/local/squid/var/cache
/usr/local/squid/bin/RunCache &
;;
stop)
for PID in $SQUID_PID;do
kill -9 $PID
done
;;
init)
/usr/local/squid/sbin/squid -z
;;
reload)
/usr/local/squid/sbin/squid -k reconfigure
;;
*)
echo "Please Use start | stop | init | reload"
;;
esac
cachemgr
squid/etc/cachemgr.conf
內容如下:
192.168.0.2:80
將squid/libexec/cachemgr.cgi 複製到apache的cgi-bin 底下
將apache listen port 改掉,不要與squid 相衝突.
將squid & apache 重起即可
httpd.conf
Listen 8080
AllowOverride None
Options None
Order allow,deny
Allow from all
2009年3月12日 星期四
JavaScript 與 Macromedia Flash 之間的通訊範例
以下是 Macromedia Flash 與使用 JavaScript 的 HTML 文件之間的通訊範例, 您可以照步驟重建各個範例。
前提:
需具備 JavaScript 的使用知識才能充分運用這些技巧。JavaScript 不在本 TechNote 的範圍之內, 不過, 您可以透過許多資源, 學習 JavaScript 的知識。如需詳細資訊, 請參閱本文件底部的其他資訊。資深的程式碼撰寫者, 請務必閱讀文件使用 Flash 撰寫程式 *, 取得控制 Macromedia Flash Player 的 JavaScript 方法概觀。
本 TechNote 中所討論的 Flash/JavaScript 通訊有三種基本類型:
* JavaScript 對 Flash 的通訊 - 使用 Flash Player 的 JavaScript 方法
* Flash 對 JavaScript 的通訊 - 使用 Flash 的 fscommand
* Flash 對 Flash 的通訊 - 使用本機連線物件或結合以上兩種技巧
並非所有瀏覽器都有瀏覽器程式語言的功能。為了與 Flash Player 通訊, 瀏覽器必須內建 Flash Player 所能「接聽」的連結。下列為瀏覽器需求:
*
Netscape Navigator 3.0 - 4.7x, 以及 Netscape 6.2 或更新版本
(Windows 95/98/NT/2000/XP 或 MacOS;採用 LiveConnect 與 Java)
*
Internet Explorer 3.0 及更新版本
(僅限 Windows 95/98/NT/2000/XP;採用 ActiveX)
注意: Macintosh 上的 Internet Explorer 與 Netscape 6.0 之前的版本不支援此方法。如需詳細資訊, 請參閱本文件底部的其他資訊。
JavaScript 對 Flash 的通訊
本範例示範如何使用 Flash 方法, 從 HTML 輸入文字欄位將變數傳送到同份 HTML 文件中的內嵌式 Flash 檔案。HTML 輸入欄位中所輸入的日期, 會使用 Flash 的 SetVariable 方法, 填入 Flash 檔中的文字欄位。
檢視範例: 範例 1 *
下載原始檔:
javascript_to_flash.zip (17K)
遵循步驟:
在 Flash 中
1. 在 Flash 中建立新檔案, 以 javascript_to_flash.fla 命名並儲存。
2. 使用「文字工具」, 在「舞台」上插入一個文字欄位。
3.
選取文字欄位, 在「屬性」面板中, 從下拉式選單中選擇「動態文字」, 然後在變數欄位中輸入 myVar。
注意: 最佳編碼方式就是使用需要有 myVar.text 的「實體」欄位。由於此方法既簡單又能與 Flash 4 和 5 逆向相容, 所以我們選擇使用此變數欄位。
4. 儲存檔案。
5. 使用「發佈」功能, 選擇「僅限 Flash」HTML 樣版, 從 Flash 同時發佈 HTML 頁面以及 Flash SWF, 這些動作會在與儲存原始 FLA 檔案相同的資料夾中建立。
在 Dreamweaver 中
以下的指示是針對 Dreamweaver, 不過, 您可以使用任何的 HTML 編輯器, 利用相同的技巧, 手動編輯程式碼。
1. 開啟 Flash 在上述步驟 5 中發佈的 HTML 檔案。
2.
插入 Flash 媒體及 OBJECT/EMBED 程式碼
1. 選擇「插入 > 媒體 > Flash」, 然後選擇上面建立的 SWF"javascript_to_flash.swf"。
2. 選取 Flash 影片預留位置。
3. 使用「檢視 > 程式碼」, 開啟 Dreamweaver 的程式碼檢視。需要著重的 OBJECT 及 EMBED 標籤會反白顯示。
4.
如果程式碼尚未出現在 OBJECT 標籤中, 請輸入值 id="myFlash"。另外還要確定 name="myFlash" 此值沒有出現在程式碼的第一個部份中, 也就是標籤的主要 OBJECT 部份。
codebase="http://download.macromedia.com/pub/shockwave/cabs/
flash/swflash.cab#version=5,0,0,0"
width=366 height=142 id="myFlash">
注意: 複製程式碼並貼至 Dreamweaver 時, 必須移除 Script 中可能的多餘斷行, 否則會在頁面上產生錯誤。
注意: Netscape 6.2 及以上版本需要移除 object 標籤的 name 屬性, 才能允許 Script 通訊。Dreamweaver 在「屬性」檢測器中有個欄位, 會自動寫入兩種屬性, 因此您必須手動編輯程式碼, 確定標籤是正確的。
5.
在標籤的 EMBED 區段中如果不包含這兩種屬性, 請輸入 name="myFlash" 和 swLiveConnect="true" 的值。確定 EMBED 標籤的這個部份沒有「id」值。
type="application/x-shockwave-flash"
pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?
P1_Prod_Version=ShockwaveFlash"
name="myFlash" swLiveConnect="true">
3.
建立 HTML 中的表單欄位
1. 使用「檢視 > 設計」, 返回「設計檢視」。
2. 選擇「插入 > 表單物件 > 文字欄位」(出現新增表單標籤提示時, 按一下「是」)。
3.
將文字欄位的 HTML 標籤修改如下:
完成文字欄位的內容變更後, 會自動呼叫 onChange 處理常式。變更生效時, 會呼叫 doPassVar() 函數 (請看下個步驟)。
4.
建立用以傳遞值的 Javascript 函數
複製並貼上 HTML 原始碼中介於 與 標籤之間的下列 JavaScript:
當文字欄位出現變更時, 會呼叫此 JavaScript 函數, 它使用 Flash JavaScript 方法 SetVariable, 將 Flash 影片中的 myVar 變數設成在 HTML 文字表單欄位中輸入的值。
5. 選擇「檔案 > 儲存」。
6. 使用 F12 在瀏覽器中測試或預覽檔案。
回到頁首
Flash 對 JavaScript 的通訊
除了從 HTML 頁面將資料傳送到 Flash 影片外, 您也可以反向操作。本範例示範如何使用 Flash 的 fscommand * 動作, 將字串從 Flash 傳送到 JavaScript 處理常式。為了示範目的, 本範例會顯示 JavaScript 警示方塊, 上面有從 Flash 傳送到瀏覽器的值。
檢視範例: 範例 2 *
下載原始檔:
flash_to_javascript.zip (17K)
遵循步驟:
在 Flash 中
1. 在 Flash 建立新檔案, 以 flash_to_javascript.fla 命名並儲存。
2. 使用「文字工具」, 將文字欄位置於「舞台」上。
3. 選取文字欄位, 在「屬性」面板中, 從下拉式選單中選擇「輸入文字」。選取邊框圖示, 就能看到欄位 (請參閱上圖的步驟指引)。
4. 在變數欄位中輸入 inputVar。
5. 將按鈕拖曳到「舞台」上。您可以選擇「視窗 > 內建元件庫 > 按鈕」, 尋找範本按鈕。
6. 選取「按鈕」並開啟「動作」面板 (「視窗 > 動作」)。
7.
將下列 fscommand 動作加到按鈕:
on(release) {
fscommand ("send_var", inputVar);
}
8. 儲存檔案。
9. 使用「發佈」功能, 選擇「僅限 Flash」HTML 樣版, 從 Flash 同時發佈 HTML 頁面以及 Flash SWF, 這些動作會在與儲存原始 FLA 檔案相同的資料夾中建立。
在 Dreamweaver 中
以下的指示是針對 Dreamweaver, 不過, 您可以使用任何的 HTML 編輯器, 利用相同的技巧, 手動編輯程式碼。
1. 開啟上述步驟 9 中 Flash「發佈」命令建立的 HTML 檔案。
2.
插入 Flash 媒體及 OBJECT/EMBED 程式碼
1. 選擇「插入 > 媒體 > Flash」, 然後選擇上面建立的 SWF"javascript_to_flash.swf"。
2. 選取 Flash 影片預留位置。
3. 使用「檢視 > 程式碼」, 開啟 Dreamweaver 的程式碼檢視。需要著重的 OBJECT 及 EMBED 標籤會反白顯示。
4.
如果程式碼尚未出現在 OBJECT 標籤中, 請輸入值 id="myFlash"。另外還要確定 name="myFlash" 此值沒有出現在程式碼的第一個部份中, 也就是標籤的主要 OBJECT 部份。
codebase="http://download.macromedia.com/pub/shockwave/cabs/
flash/swflash.cab#version=5,0,0,0"
width=366 height=142 id="myFlash">
注意: 複製程式碼並貼至 Dreamweaver 時, 必須移除 Script 中可能的多餘斷行, 否則會在頁面上產生錯誤。
注意: Netscape 6.2 及以上版本需要移除 object 標籤的 name 屬性, 才能允許 Script 通訊。Dreamweaver 在「屬性」檢測器中有個欄位, 會自動寫入兩種屬性, 因此您必須手動編輯程式碼, 確定標籤是正確的。
5.
在標籤的 EMBED 區段中如果不包含這兩種屬性, 請輸入值 name="myFlash" 和 swLiveConnect="true"。確定 EMBED 標籤的這個部份沒有「id」值。
width=366 height=142
type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?
P1_Prod_Version=ShockwaveFlash" name="myFlash" swLiveConnect="true">
3.
建立用以擷取與顯示值的 Javascript 函數
1.
開啟 HTML 文件的開頭標籤時, 插入下列程式碼:
\n');
}
//-->
執行警示的特定函數以紅色加強顯示。如需有關 Javascript 的詳細資訊, 請參閱其他資訊。
2. 選擇「檔案 > 儲存」。
3. 使用 F12 在瀏覽器中測試或預覽檔案。
回到頁首
Flash 對 Flash 的通訊
相同 HTML 文件中的兩個或多個 Macromedia Flash 影片, 可以透過結合以上討論的兩種技巧而互相傳送訊息。您可以使用 fscommand 將訊息從 Flash 影片傳送到網頁瀏覽器, 再使用 Flash 的JavaScript 方法將訊息從瀏覽器傳送到 Flash 影片。如需此項詳細資訊, 請參閱 Flash 影片之間通訊的範例 (TN 15692) *。
從使用 Macromedia Flash MX 開始, 您可以將本機連線物件用於 Flash 對 Flash 的通訊。這可以使同份 HTML 文件或兩個瀏覽器視窗中的兩個 Flash 影片, 透過 JavaScript 或 fscommand 動作互相傳送訊息。如需詳細資訊, 請參閱在 Macromedia Flash MX 中使用本機連線物件 *。
回到頁首
其他資訊
如需從函數傳送的 JavaScript 命令的技術文件 (含範例), 請參閱使用 Flash 撰寫程式 *。如需有關 JavaScript 的詳細資訊, 請造訪 Webmonkey.com。
如需 Macintosh 上的 Internet Explorer 詳細資訊, 請參閱 Macintosh 平台上的 Flash 與 Internet Explorer 問題 (TechNote 13638) *。
如需 Netscape 與 Mozilla 支援資訊, 請參閱 Netscape 6, 6.01 和 Mozilla (Technote 14625) *。
如需瀏覽器所支援的不同功能完整列表, 請參閱各種瀏覽器所支援的 Flash 功能詳盡清單 (Technote 14159) *。
如需可控制 Macromedia Flash Player 的 JavaScript 方法概觀, 請參閱使用 Flash 撰寫程式 (文件) *。
摘自:http://www.adobe.com/tw/support/flash/ts/documents/javascript_comm.htm#ftjc
前提:
需具備 JavaScript 的使用知識才能充分運用這些技巧。JavaScript 不在本 TechNote 的範圍之內, 不過, 您可以透過許多資源, 學習 JavaScript 的知識。如需詳細資訊, 請參閱本文件底部的其他資訊。資深的程式碼撰寫者, 請務必閱讀文件使用 Flash 撰寫程式 *, 取得控制 Macromedia Flash Player 的 JavaScript 方法概觀。
本 TechNote 中所討論的 Flash/JavaScript 通訊有三種基本類型:
* JavaScript 對 Flash 的通訊 - 使用 Flash Player 的 JavaScript 方法
* Flash 對 JavaScript 的通訊 - 使用 Flash 的 fscommand
* Flash 對 Flash 的通訊 - 使用本機連線物件或結合以上兩種技巧
並非所有瀏覽器都有瀏覽器程式語言的功能。為了與 Flash Player 通訊, 瀏覽器必須內建 Flash Player 所能「接聽」的連結。下列為瀏覽器需求:
*
Netscape Navigator 3.0 - 4.7x, 以及 Netscape 6.2 或更新版本
(Windows 95/98/NT/2000/XP 或 MacOS;採用 LiveConnect 與 Java)
*
Internet Explorer 3.0 及更新版本
(僅限 Windows 95/98/NT/2000/XP;採用 ActiveX)
注意: Macintosh 上的 Internet Explorer 與 Netscape 6.0 之前的版本不支援此方法。如需詳細資訊, 請參閱本文件底部的其他資訊。
JavaScript 對 Flash 的通訊
本範例示範如何使用 Flash 方法, 從 HTML 輸入文字欄位將變數傳送到同份 HTML 文件中的內嵌式 Flash 檔案。HTML 輸入欄位中所輸入的日期, 會使用 Flash 的 SetVariable 方法, 填入 Flash 檔中的文字欄位。
檢視範例: 範例 1 *
下載原始檔:
javascript_to_flash.zip (17K)
遵循步驟:
在 Flash 中
1. 在 Flash 中建立新檔案, 以 javascript_to_flash.fla 命名並儲存。
2. 使用「文字工具」, 在「舞台」上插入一個文字欄位。
3.
選取文字欄位, 在「屬性」面板中, 從下拉式選單中選擇「動態文字」, 然後在變數欄位中輸入 myVar。
注意: 最佳編碼方式就是使用需要有 myVar.text 的「實體」欄位。由於此方法既簡單又能與 Flash 4 和 5 逆向相容, 所以我們選擇使用此變數欄位。
4. 儲存檔案。
5. 使用「發佈」功能, 選擇「僅限 Flash」HTML 樣版, 從 Flash 同時發佈 HTML 頁面以及 Flash SWF, 這些動作會在與儲存原始 FLA 檔案相同的資料夾中建立。
在 Dreamweaver 中
以下的指示是針對 Dreamweaver, 不過, 您可以使用任何的 HTML 編輯器, 利用相同的技巧, 手動編輯程式碼。
1. 開啟 Flash 在上述步驟 5 中發佈的 HTML 檔案。
2.
插入 Flash 媒體及 OBJECT/EMBED 程式碼
1. 選擇「插入 > 媒體 > Flash」, 然後選擇上面建立的 SWF"javascript_to_flash.swf"。
2. 選取 Flash 影片預留位置。
3. 使用「檢視 > 程式碼」, 開啟 Dreamweaver 的程式碼檢視。需要著重的 OBJECT 及 EMBED 標籤會反白顯示。
4.
如果程式碼尚未出現在 OBJECT 標籤中, 請輸入值 id="myFlash"。另外還要確定 name="myFlash" 此值沒有出現在程式碼的第一個部份中, 也就是標籤的主要 OBJECT 部份。
codebase="http://download.macromedia.com/pub/shockwave/cabs/
flash/swflash.cab#version=5,0,0,0"
width=366 height=142 id="myFlash">
注意: 複製程式碼並貼至 Dreamweaver 時, 必須移除 Script 中可能的多餘斷行, 否則會在頁面上產生錯誤。
注意: Netscape 6.2 及以上版本需要移除 object 標籤的 name 屬性, 才能允許 Script 通訊。Dreamweaver 在「屬性」檢測器中有個欄位, 會自動寫入兩種屬性, 因此您必須手動編輯程式碼, 確定標籤是正確的。
5.
在標籤的 EMBED 區段中如果不包含這兩種屬性, 請輸入 name="myFlash" 和 swLiveConnect="true" 的值。確定 EMBED 標籤的這個部份沒有「id」值。
type="application/x-shockwave-flash"
pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?
P1_Prod_Version=ShockwaveFlash"
name="myFlash" swLiveConnect="true">
3.
建立 HTML 中的表單欄位
1. 使用「檢視 > 設計」, 返回「設計檢視」。
2. 選擇「插入 > 表單物件 > 文字欄位」(出現新增表單標籤提示時, 按一下「是」)。
3.
將文字欄位的 HTML 標籤修改如下:
完成文字欄位的內容變更後, 會自動呼叫 onChange 處理常式。變更生效時, 會呼叫 doPassVar() 函數 (請看下個步驟)。
4.
建立用以傳遞值的 Javascript 函數
複製並貼上 HTML 原始碼中介於 與 標籤之間的下列 JavaScript:
當文字欄位出現變更時, 會呼叫此 JavaScript 函數, 它使用 Flash JavaScript 方法 SetVariable, 將 Flash 影片中的 myVar 變數設成在 HTML 文字表單欄位中輸入的值。
5. 選擇「檔案 > 儲存」。
6. 使用 F12 在瀏覽器中測試或預覽檔案。
回到頁首
Flash 對 JavaScript 的通訊
除了從 HTML 頁面將資料傳送到 Flash 影片外, 您也可以反向操作。本範例示範如何使用 Flash 的 fscommand * 動作, 將字串從 Flash 傳送到 JavaScript 處理常式。為了示範目的, 本範例會顯示 JavaScript 警示方塊, 上面有從 Flash 傳送到瀏覽器的值。
檢視範例: 範例 2 *
下載原始檔:
flash_to_javascript.zip (17K)
遵循步驟:
在 Flash 中
1. 在 Flash 建立新檔案, 以 flash_to_javascript.fla 命名並儲存。
2. 使用「文字工具」, 將文字欄位置於「舞台」上。
3. 選取文字欄位, 在「屬性」面板中, 從下拉式選單中選擇「輸入文字」。選取邊框圖示, 就能看到欄位 (請參閱上圖的步驟指引)。
4. 在變數欄位中輸入 inputVar。
5. 將按鈕拖曳到「舞台」上。您可以選擇「視窗 > 內建元件庫 > 按鈕」, 尋找範本按鈕。
6. 選取「按鈕」並開啟「動作」面板 (「視窗 > 動作」)。
7.
將下列 fscommand 動作加到按鈕:
on(release) {
fscommand ("send_var", inputVar);
}
8. 儲存檔案。
9. 使用「發佈」功能, 選擇「僅限 Flash」HTML 樣版, 從 Flash 同時發佈 HTML 頁面以及 Flash SWF, 這些動作會在與儲存原始 FLA 檔案相同的資料夾中建立。
在 Dreamweaver 中
以下的指示是針對 Dreamweaver, 不過, 您可以使用任何的 HTML 編輯器, 利用相同的技巧, 手動編輯程式碼。
1. 開啟上述步驟 9 中 Flash「發佈」命令建立的 HTML 檔案。
2.
插入 Flash 媒體及 OBJECT/EMBED 程式碼
1. 選擇「插入 > 媒體 > Flash」, 然後選擇上面建立的 SWF"javascript_to_flash.swf"。
2. 選取 Flash 影片預留位置。
3. 使用「檢視 > 程式碼」, 開啟 Dreamweaver 的程式碼檢視。需要著重的 OBJECT 及 EMBED 標籤會反白顯示。
4.
如果程式碼尚未出現在 OBJECT 標籤中, 請輸入值 id="myFlash"。另外還要確定 name="myFlash" 此值沒有出現在程式碼的第一個部份中, 也就是標籤的主要 OBJECT 部份。
codebase="http://download.macromedia.com/pub/shockwave/cabs/
flash/swflash.cab#version=5,0,0,0"
width=366 height=142 id="myFlash">
注意: 複製程式碼並貼至 Dreamweaver 時, 必須移除 Script 中可能的多餘斷行, 否則會在頁面上產生錯誤。
注意: Netscape 6.2 及以上版本需要移除 object 標籤的 name 屬性, 才能允許 Script 通訊。Dreamweaver 在「屬性」檢測器中有個欄位, 會自動寫入兩種屬性, 因此您必須手動編輯程式碼, 確定標籤是正確的。
5.
在標籤的 EMBED 區段中如果不包含這兩種屬性, 請輸入值 name="myFlash" 和 swLiveConnect="true"。確定 EMBED 標籤的這個部份沒有「id」值。
width=366 height=142
type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?
P1_Prod_Version=ShockwaveFlash" name="myFlash" swLiveConnect="true">
3.
建立用以擷取與顯示值的 Javascript 函數
1.
開啟 HTML 文件的開頭標籤時, 插入下列程式碼:
\n');
}
//-->
執行警示的特定函數以紅色加強顯示。如需有關 Javascript 的詳細資訊, 請參閱其他資訊。
2. 選擇「檔案 > 儲存」。
3. 使用 F12 在瀏覽器中測試或預覽檔案。
回到頁首
Flash 對 Flash 的通訊
相同 HTML 文件中的兩個或多個 Macromedia Flash 影片, 可以透過結合以上討論的兩種技巧而互相傳送訊息。您可以使用 fscommand 將訊息從 Flash 影片傳送到網頁瀏覽器, 再使用 Flash 的JavaScript 方法將訊息從瀏覽器傳送到 Flash 影片。如需此項詳細資訊, 請參閱 Flash 影片之間通訊的範例 (TN 15692) *。
從使用 Macromedia Flash MX 開始, 您可以將本機連線物件用於 Flash 對 Flash 的通訊。這可以使同份 HTML 文件或兩個瀏覽器視窗中的兩個 Flash 影片, 透過 JavaScript 或 fscommand 動作互相傳送訊息。如需詳細資訊, 請參閱在 Macromedia Flash MX 中使用本機連線物件 *。
回到頁首
其他資訊
如需從函數傳送的 JavaScript 命令的技術文件 (含範例), 請參閱使用 Flash 撰寫程式 *。如需有關 JavaScript 的詳細資訊, 請造訪 Webmonkey.com。
如需 Macintosh 上的 Internet Explorer 詳細資訊, 請參閱 Macintosh 平台上的 Flash 與 Internet Explorer 問題 (TechNote 13638) *。
如需 Netscape 與 Mozilla 支援資訊, 請參閱 Netscape 6, 6.01 和 Mozilla (Technote 14625) *。
如需瀏覽器所支援的不同功能完整列表, 請參閱各種瀏覽器所支援的 Flash 功能詳盡清單 (Technote 14159) *。
如需可控制 Macromedia Flash Player 的 JavaScript 方法概觀, 請參閱使用 Flash 撰寫程式 (文件) *。
摘自:http://www.adobe.com/tw/support/flash/ts/documents/javascript_comm.htm#ftjc
2009年3月11日 星期三
Server Tuning
OS層
-Linux [xx] tuning
[xx]=kernel,nfs,nfsd,tcp,fs…
-Application compile >> RPM
[AP]=Apache,MySQL,PHP
-setup > 系統設定 [移除不必要之service]
-chkconfig --list | grep on
MySQL
-Sphinx-Free open-source SQL full-text search engine[http://www.sphinxsearch.com/]
-my.cnf tuning
-slow-query tuning
-MySQL移至RAM disk
-amoeba-負載均衡
Apache
-Apache Lucene-full-featured text search engine[http://lucene.apache.org/java/docs/]
-error_log處理
-改用nginx -HTTP server and mail proxy server
-dmessage處理
-squid cache
PHP
-error處理
-PHP catch exception機制
FileServer
-Storage + Cluster建置 [效能 + 容錯]
-Openfiler
-Opennas
MailServer
-Mail By Pass (避過FireWall)
Security
-Mod security(先寫log,沒問題後再開始運做)
測試軟體
-BadBoy software
其他建議
-HDD -> 1萬5千轉
-FireWall向上提一層
-/var mount至獨立HDD - 讓寫入log檔工作獨立運做
-Linux [xx] tuning
[xx]=kernel,nfs,nfsd,tcp,fs…
-Application compile >> RPM
[AP]=Apache,MySQL,PHP
-setup > 系統設定 [移除不必要之service]
-chkconfig --list | grep on
MySQL
-Sphinx-Free open-source SQL full-text search engine[http://www.sphinxsearch.com/]
-my.cnf tuning
-slow-query tuning
-MySQL移至RAM disk
-amoeba-負載均衡
Apache
-Apache Lucene-full-featured text search engine[http://lucene.apache.org/java/docs/]
-error_log處理
-改用nginx -HTTP server and mail proxy server
-dmessage處理
-squid cache
PHP
-error處理
-PHP catch exception機制
FileServer
-Storage + Cluster建置 [效能 + 容錯]
-Openfiler
-Opennas
MailServer
-Mail By Pass (避過FireWall)
Security
-Mod security(先寫log,沒問題後再開始運做)
測試軟體
-BadBoy software
其他建議
-HDD -> 1萬5千轉
-FireWall向上提一層
-/var mount至獨立HDD - 讓寫入log檔工作獨立運做
最完整的sysctl.conf優化方案
網上關於sysctl.conf的優化方案有各種版本,大多都是抄來抄去的,讓新人看了很迷茫。為解決此問題,經過兩天的整理,查了N多資料,將大家常用的總結如下,很多默認的不需要修改的暫未涉及,今後將逐步把所有的項目都有個翻譯、講解、修改建議,如有修改,將以此文為準,其他地方的內容,本人不負責更新。
因此轉載請註明鏈接地址: http://www.bsdlover.cn/security/2007/1216/article_8.html
如果您有補充或修訂意見,請於本文後評論或郵件聯繫 cujxtm@gmail.com,萬分感謝!
###################
所有rfc相關的選項都是默認啟用的,因此網上的那些還自己寫rfc支持的都可以扔掉了:)
###############################
net.inet.ip.sourceroute=0
net.inet.ip.accept_sourceroute=0
#############################
通過源路由,攻擊者可以嘗試到達內部IP地址 --包括RFC1918中的地址,所以
不接受源路由信息包可以防止你的內部網絡被探測。
#################################
net.inet.tcp.drop_synfin=1
###################################
安全參數,編譯內核的時候加了options TCP_DROP_SYNFIN才可以用,可以阻止某些OS探測。
##################################
kern.maxvnodes=8446
#################http://www.bsdlover.cn#########
vnode 是對文件或目錄的一種內部表達。 因此, 增加可以被操作系統利用的 vnode 數量將降低磁盤的 I/O。
一般而言, 這是由操作系統自行完成的,也不需要加以修改。但在某些時候磁盤 I/O 會成為瓶頸,
而系統的 vnode 不足, 則這一配置應被增加。此時需要考慮是非活躍和空閒內存的數量。
要查看當前在用的 vnode 數量:
# sysctl vfs.numvnodes
vfs.numvnodes: 91349
要查看最大可用的 vnode 數量:
# sysctl kern.maxvnodes
kern.maxvnodes: 100000
如果當前的 vnode 用量接近最大值,則將 kern.maxvnodes 值增大 1,000 可能是個好主意。
您應繼續查看 vfs.numvnodes 的數值, 如果它再次攀升到接近最大值的程度,
仍需繼續提高 kern.maxvnodes。 在 top(1) 中顯示的內存用量應有顯著變化,
更多內存會處於活躍 (active) 狀態。
####################################
kern.maxproc: 964
#################http://www.bsdlover.cn#########
Maximum number of processes
####################################
kern.maxprocperuid: 867
#################http://www.bsdlover.cn#########
Maximum processes allowed per userid
####################################
因為我的maxusers設置的是256,20+16*maxusers=4116。
maxprocperuid至少要比maxproc少1,因為init(8) 這個系統程序絕對要保持在運作狀態。
我給它設置的2068。
kern.maxfiles: 1928
#################http://www.bsdlover.cn#########
系統中支持最多同時開啟的文件數量,如果你在運行數據庫或大的很吃描述符的進程,那麼應該設置在20000以上,
比如kde這樣的桌面環境,它同時要用的文件非常多。
一般推薦設置為32768或者65536。
####################################
kern.argmax: 262144
#################http://www.bsdlover.cn#########
maximum number of bytes (or characters) in an argument list.
命令行下最多支持的參數,比如你在用find命令來批量刪除一些文件的時候
find . -name "*.old" -delete,如果文件數超過了這個數字,那麼會提示你數字太多的。
可以利用find . -name "*.old" -ok rm {} \;來刪除。
默認的參數已經足夠多了,因此不建議再做修改。
####################################
kern.securelevel: -1
#################http://www.bsdlover.cn#########
-1:這是系統默認級別,沒有提供任何內核的保護錯誤;
0:基本上作用不多,當你的系統剛啟動就是0級別的,當進入多用戶模式的時候就自動變成1級了。
1:在這個級別上,有如下幾個限制:
a. 不能通過kldload或者kldunload加載或者卸載可加載內核模塊;
b. 應用程序不能通過/dev/mem或者/dev/kmem直接寫內存;
c. 不能直接往已經裝在(mounted)的磁盤寫東西,也就是不能格式化磁盤,但是可以通過標準的內核接口執行寫操作;
d. 不能啟動X-windows,同時不能使用chflags來修改文件屬性;
2:在 1 級別的基礎上還不能寫沒裝載的磁盤,而且不能在1秒之內製造多次警告,這個是防止DoS控制台的;
3:在 2 級別的級別上不允許修改IPFW防火牆的規則。
如果你已經裝了防火牆,並且把規則設好了,不輕易改動,那麼建議使用3級別,如果你沒有裝防火牆,而且還準備裝防火牆的話,不建議使用。
我們這裡推薦使用 2 級別,能夠避免比較多對內核攻擊。
####################################
kern.maxfilesperproc: 1735
#################http://www.bsdlover.cn#########
每個進程能夠同時打開的最大文件數量,網上很多資料寫的是32768
除非用異步I/O或大量線程,打開這麼多的文件恐怕是不太正常的。
我個人建議不做修改,保留默認。
####################################
kern.ipc.maxsockbuf: 262144
#################http://www.bsdlover.cn#########
最大的套接字緩衝區,網上有建議設置為2097152(2M)、8388608(8M)的。
我個人倒是建議不做修改,保持默認的256K即可,緩衝區大了可能造成碎片、阻塞或者丟包。
####################################
kern.ipc.somaxconn: 128
#################http://www.bsdlover.cn#########
最大的等待連接完成的套接字隊列大小,即並發連接數。
高負載服務器和受到Dos攻擊的系統也許會因為這個隊列被塞滿而不能提供正常服務。
默認為128,推薦在1024-4096之間,根據機器和實際情況需要改動,數字越大佔用內存也越大。
####################################
kern.ipc.nmbclusters: 4800
#################http://www.bsdlover.cn#########
這個值用來調整系統在開機後所要分配給網絡 mbufs 的 cluster 數量,
由於每個 cluster 大小為 2K,所以當這個值為 1024 時,也是會用到 2MB 的核心內存空間。
假設我們的網頁同時約有 1000 個聯機,而 TCP 傳送及接收的暫存區大小都是 16K,
則最糟的情況下,我們會需要 (16K+16K) * 1024,也就是 32MB 的空間,
然而所需的 mbufs 大概是這個空間的二倍,也就是 64MB,所以所需的 cluster 數量為 64MB/2K,也就是 32768。
對於內存有限的機器,建議值是 1024 到 4096 之間,而當擁有海量存儲器空間時,我們可以將它設定為 4096 到 32768 之間。
我們可以使用 netstat 這個指令並加上參數 -m 來查看目前所使用的 mbufs 數量。
要修改這個值必須在一開機就修改,所以只能在 /boot/loader.conf 中加入修改的設定
kern.ipc.nmbclusters=32768
####################################
kern.ipc.shmmax: 33554432
#################http://www.bsdlover.cn#########
共享內存和信號燈("System VIPC")如果這些過小的話,有些大型的軟件將無法啟動
安裝xine和mplayer提示的設置為67108864,即64M,
如果內存多的話,可以設置為134217728,即128M
####################################
kern.ipc.shmall: 8192
#################http://www.bsdlover.cn#########
共享內存和信號燈("System VIPC")如果這些過小的話,有些大型的軟件將無法啟動
安裝xine和mplayer提示的設置為32768
####################################
kern.ipc.shm_use_phys: 0
#################http://www.bsdlover.cn#########
如果我們將它設成 1,則所有 System V 共享內存 (share memory,一種程序間溝通的方式)部份都會被留在實體的內存 (physical memory) 中,
而不會被放到硬盤上的 swap 空間。我們知道物理內存的存取速度比硬盤快許多,而當物理內存空間不足時,
部份數據會被放到虛擬的內存上,從物理內存和虛擬內存之間移轉的動作就叫作 swap。如果時常做 swap 的動作,
則需要一直對硬盤作 I/O,速度會很慢。因此,如果我們有大量的程序 (數百個) 需要共同分享一個小的共享內存空間,
或者是共享內存空間很大時,我們可以將這個值打開。
這一項,我個人建議不做修改,除非你的內存非常大。
####################################
kern.ipc.shm_allow_removed: 0
#################http://www.bsdlover.cn#########
共享內存是否允許移除?這項似乎是在fb下裝vmware需要設置為1的,否則會有加載SVGA出錯的提示
作為服務器,這項不動也罷。
####################################
kern.ipc.numopensockets: 12
#################http://www.bsdlover.cn#########
已經開啟的socket數目,可以在最繁忙的時候看看它是多少,然後就可以知道maxsockets應該設置成多少了。
####################################
kern.ipc.maxsockets: 1928
#################http://www.bsdlover.cn#########
這是用來設定系統最大可以開啟的 socket 數目。如果您的服務器會提供大量的 FTP 服務,
而且常快速的傳輸一些小檔案,您也許會發現常傳輸到一半就中斷。因為 FTP 在傳輸檔案時,
每一個檔案都必須開啟一個 socket 來傳輸,但關閉 socket 需要一段時間,如果傳輸速度很快,
而檔案又多,則同一時間所開啟的 socket 會超過原本系統所許可的值,這時我們就必須把這個值調大一點。
除了 FTP 外,也許有其它網絡程序也會有這種問題。
然而,這個值必須在系統一開機就設定好,所以如果要修改這項設定,我們必須修改 /boot/loader.conf 才行
kern.ipc.maxsockets="16424"
####################################
kern.ipc.nsfbufs: 1456
#################http://www.bsdlover.cn#########
經常使用 sendfile(2) 系統調用的繁忙的服務器,
有必要通過 NSFBUFS 內核選項或者在 /boot/loader.conf (查看 loader(8) 以獲得更多細節) 中設置它的值來調節 sendfile(2) 緩存數量。
這個參數需要調節的普通原因是在進程中看到 sfbufa 狀態。sysctl kern.ipc.nsfbufs 變量在內核配置變量中是只讀的。
這個參數是由 kern.maxusers 決定的,然而它可能有必要因此而調整。
在/boot/loader.conf裡加入
kern.ipc.nsfbufs="2496"
####################################
kern.maxusers: 59
#################http://www.bsdlover.cn#########
maxusers 的值決定了處理程序所容許的最大值,20+16*maxusers 就是你將得到的所容許處理程序。
系統一開機就必須要有 18 個處理程序 (process),即便是簡單的執行指令 man 又會產生 9 個 process,
所以將這個值設為 64 應該是一個合理的數目。
如果你的系統會出現 proc table full 的訊息的話,可以就把它設大一點,例如 128。
除非您的系統會需要同時開啟很多檔案,否則請不要設定超過 256。
可以在 /boot/loader.conf 中加入該選項的設定,
kern.maxusers=256
####################################
kern.coredump: 1
#################http://www.bsdlover.cn#########
如果設置為0,則程序異常退出時不會生成core文件,作為服務器,不建議這樣。
####################################
kern.corefile: %N.core
#################http://www.bsdlover.cn#########
可設置為kern.corefile="/data/coredump/%U-%P-%N.core"
其中 %U是UID,%P是進程ID,%N是進程名,當然/data/coredump必須是一個實際存在的目錄
####################################
vm.swap_idle_enabled: 0
vm.swap_idle_threshold1: 2
vm.swap_idle_threshold2: 10
#########################
在有很多用戶進入、離開系統和有很多空閒進程的大的多用戶系統中很有用。
可以讓進程更快地進入內存,但它會吃掉更多的交換和磁盤帶寬。
系統默認的頁面調度算法已經很好了,最好不要更改。
########################
vfs.ufs.dirhash_maxmem: 2097152
#########################
默認的dirhash最大內存,默認2M
增加它有助於改善單目錄超過100K個文件時的反覆讀目錄時的性能
建議修改為33554432(32M)
#############################
vfs.vmiodirenable: 1
#################
這個變量控制目錄是否被系統緩存。大多數目錄是小的,在系統中只使用單個片斷(典型的是1K)並且在緩存中使用的更小 (典型的是512字節)。
當這個變量設置為關閉 (0) 時,緩存器僅僅緩存固定數量的目錄,即使您有很大的內存。
而將其開啟 (設置為1) 時,則允許緩存器用 VM 頁面緩存來緩存這些目錄,讓所有可用內存來緩存目錄。
不利的是最小的用來緩存目錄的核心內存是大於 512 字節的物理頁面大小(通常是 4k)。
我們建議如果您在運行任何操作大量文件的程序時保持這個選項打開的默認值。
這些服務包括 web 緩存,大容量郵件系統和新聞系統。
儘管可能會浪費一些內存,但打開這個選項通常不會降低性能。但還是應該檢驗一下。
####################
vfs.hirunningspace: 1048576
############################
這個值決定了系統可以將多少數據放在寫入儲存設備的等候區。通常使用默認值即可,
但當我們有多顆硬盤時,我們可以將它調大為 4MB 或 5MB。
注意這個設置成很高的值(超過緩存器的寫極限)會導致壞的性能。
不要盲目的把它設置太高!高的數值會導致同時發生的讀操作的遲延。
#############################
vfs.write_behind: 1
#########################
這個選項預設為 1,也就是打開的狀態。在打開時,在系統需要寫入數據在硬盤或其它儲存設備上時,
它會等到收集了一個 cluster 單位的數據後再一次寫入,否則會在一個暫存區空間有寫入需求時就立即寫到硬盤上。
這個選項打開時,對於一個大的連續的文件寫入速度非常有幫助。但如果您遇到有很多行程延滯在等待寫入動作時,您可能必須關閉這個功能。
############################
net.local.stream.sendspace: 8192
##################################
本地套接字連接的數據發送空間
建議設置為65536
###################################
net.local.stream.recvspace: 8192
##################################
本地套接字連接的數據接收空間
建議設置為65536
###################################
net.inet.ip.portrange.lowfirst: 1023
net.inet.ip.portrange.lowlast: 600
net.inet.ip.portrange.first: 49152
net.inet.ip.portrange.last: 65535
net.inet.ip.portrange.hifirst: 49152
net.inet.ip.portrange.hilast: 65535
###################
以上六項是用來控制TCP及UDP所使用的port範圍,這個範圍被分成三個部份,低範圍、預設範圍、及高範圍。
這些是你的服務器主動發起連接時的臨時端口的範圍,預設的已經1萬多了,一般的應用就足夠了。
如果是比較忙碌的FTP server,一般也不會同時提供給1萬多人訪問的,
當然如果很不幸,你的服務器就要提供很多,那麼可以修改first的值,比如直接用1024開始
#########################
net.inet.ip.redirect: 1
#########################
設置為0,屏蔽ip重定向功能
###########################
net.inet.ip.rtexpire: 3600
net.inet.ip.rtminexpire: 10
########################
很多apache產生的CLOSE_WAIT狀態,這種狀態是等待客戶端關閉,但是客戶端那邊並沒有正常的關閉,於是留下很多這樣的東東。
建議都修改為2
#########################
net.inet.ip.intr_queue_maxlen: 50
########################
Maximum size of the IP input queue,如果下面的net.inet.ip.intr_queue_drops一直在增加,
那就說明你的隊列空間不足了,那麼可以考慮增加該值。
##########################
net.inet.ip.intr_queue_drops: 0
####################
Number of packets dropped from the IP input queue,如果你sysctl它一直在增加,
那麼增加net.inet.ip.intr_queue_maxlen的值。
#######################
net.inet.ip.fastforwarding: 0
#############################
如果打開的話每個目標地址一次轉發成功以後它的數據都將被記錄進路由表和arp數據表,節約路由的計算時間
但會需要大量的內核內存空間來保存路由表。
如果內存夠大,打開吧,呵呵
#############################
net.inet.ip.random_id: 0
#####################
默認情況下,ip包的id號是連續的,而這些可能會被攻擊者利用,比如可以知道你nat後面帶了多少主機。
如果設置成1,則這個id號是隨機的,嘿嘿。
#####################
net.inet.icmp.maskrepl: 0
############################
防止廣播風暴,關閉其他廣播探測的響應。默認即是,無須修改。
###############################
net.inet.icmp.icmplim: 200
##############################
限制系統發送ICMP速率,改為100吧,或者保留也可,並不會給系統帶來太大的壓力。
###########################
net.inet.icmp.icmplim_output: 1
###################################
如果設置成0,就不會看到提示說Limiting icmp unreach response from 214 to 200 packets per second 等等了
不過禁止輸出容易讓我們忽視攻擊的存在。這個自己看著辦吧。
######################################
net.inet.icmp.drop_redirect: 0
net.inet.icmp.log_redirect: 0
###################################
設置為1,屏蔽ICMP重定向功能
###################################
net.inet.icmp.bmcastecho: 0
############################
防止廣播風暴,關閉廣播ECHO響應,默認即是,無須修改。
###############################
net.inet.tcp.mssdflt: 512
net.inet.tcp.minmss: 216
###############################
數據包數據段最小值,以上兩個選項最好不動!或者只修改mssdflt為1460,minmss不動。
原因詳見http://www.bsdlover.cn/security/2007/1211/article_4.html
#############################
net.inet.tcp.keepidle: 7200000
######################
TCP的套接字的空閒時間,默認時間太長,可以改為600000(10分鐘)。
##########################
net.inet.tcp.sendspace: 32768
#################http://www.bsdlover.cn#########
最大的待發送TCP數據緩衝區空間,應用程序將數據放到這裡就認為發送成功了,系統TCP堆棧保證數據的正常發送。
####################################
net.inet.tcp.recvspace: 65536
###################################
最大的接受TCP緩衝區空間,系統從這裡將數據分發給不同的套接字,增大該空間可提高系統瞬間接受數據的能力以提高性能。
###################################
這二個選項分別控制了網絡 TCP 聯機所使用的傳送及接收暫存區的大小。預設的傳送暫存區為 32K,而接收暫存區為 64K。
如果需要加速 TCP 的傳輸,可以將這二個值調大一點,但缺點是太大的值會造成系統核心佔用太多的內存。
如果我們的機器會同時服務數百或數千個網絡聯機,那麼這二個選項最好維持默認值,否則會造成系統核心內存不足。
但如果我們使用的是 gigabite 的網絡,將這二個值調大會有明顯效能的提升。
傳送及接收的暫存區大小可以分開調整,
例如,假設我們的系統主要做為網頁服務器,我們可以將接收的暫存區調小一點,並將傳送的暫存區調大,如此一來,我們就可以避免佔去太多的核心內存空間。
net.inet.udp.maxdgram: 9216
#########################
最大的發送UDP數據緩衝區大小,網上的資料大多都是65536,我個人認為沒多大必要,
如果要調整,可以試試24576。
##############################
net.inet.udp.recvspace: 42080
##################
最大的接受UDP緩衝區大小,網上的資料大多都是65536,我個人認為沒多大必要,
如果要調整,可以試試49152。
#######################
以上四項配置通常不會導致問題,一般說來網絡流量是不對稱的,因此應該根據實際情況調整,並觀察其效果。
如果我們將傳送或接收的暫存區設為大於 65535,除非服務器本身及客戶端所使用的操作系統都支持 TCP 協議的 windows scaling extension (請參考 RFC 1323 文件)。
FreeBSD默認已支持 rfs1323 (即 sysctl 的 net.inet.tcp.rfc1323 選項)。
###################################################
net.inet.tcp.log_in_vain: 0
##################
記錄下任何TCP連接,這個一般情況下不應該更改。
####################
net.inet.tcp.blackhole: 0
##################################
建議設置為2,接收到一個已經關閉的端口發來的所有包,直接drop,如果設置為1則是只針對TCP包
#####################################
net.inet.tcp.delayed_ack: 1
###########################
當一台計算機發起TCP連接請求時,系統會回應ACK應答數據包。
該選項設置是否延遲ACK應答數據包,把它和包含數據的數據包一起發送。
在高速網絡和低負載的情況下會略微提高性能,但在網絡連接較差的時候,
對方計算機得不到應答會持續發起連接請求,反而會讓網絡更加擁堵,降低性能。
因此這個值我建議您看情況而定,如果您的網速不是問題,可以將封包數量減少一半
如果網絡不是特別好,那麼就設置為0,有請求就先回應,這樣其實浪費的網通、電信的帶寬速率而不是你的處理時間:)
############################
net.inet.tcp.inflight.enable: 1
net.inet.tcp.inflight.debug: 0
net.inet.tcp.inflight.rttthresh: 10
net.inet.tcp.inflight.min: 6144
net.inet.tcp.inflight.max: 1073725440
net.inet.tcp.inflight.stab: 20
###########################
限制 TCP 帶寬延遲積和 NetBSD 的 TCP/Vegas 類似。
它可以通過將 sysctl 變量 net.inet.tcp.inflight.enable 設置成 1 來啟用。
系統將嘗試計算每一個連接的帶寬延遲積,並將排隊的數據量限制在恰好能保持最優吞吐量的水平上。
這一特性在您的服務器同時向使用普通調製解調器,千兆以太網,乃至更高速度的光與網絡連接 (或其他帶寬延遲積很大的連接) 的時候尤為重要,
特別是當您同時使用滑動窗縮放,或使用了大的發送窗口的時候。
如果啟用了這個選項,您還應該把 net.inet.tcp.inflight.debug 設置為 0 (禁用調試),
對於生產環境而言, 將 net.inet.tcp.inflight.min 設置成至少 6144 會很有好處。
然而, 需要注意的是,這個值設置過大事實上相當於禁用了連接帶寬延遲積限制功能。
這個限制特性減少了在路由和交換包隊列的堵塞數據數量,也減少了在本地主機接口隊列阻塞的數據的數量。
在少數的等候隊列中、交互式連接,尤其是通過慢速的調製解調器,也能用低的 往返時間操作。
但是,注意這只影響到數據發送 (上載/服務端)。對數據接收(下載)沒有效果。
調整 net.inet.tcp.inflight.stab 是 不 推薦的。
這個參數的默認值是 20,表示把 2 個最大包加入到帶寬延遲積窗口的計算中。
額外的窗口似的算法更為穩定,並改善對於多變網絡環境的相應能力,
但也會導致慢速連接下的 ping 時間增長 (儘管還是會比沒有使用 inflight 算法低許多)。
對於這些情形, 您可能會希望把這個參數減少到 15, 10, 或 5;
並可能因此而不得不減少 net.inet.tcp.inflight.min (比如說, 3500) 來得到希望的效果。
減少這些參數的值, 只應作為最後不得已時的手段來使用。
############################
net.inet.tcp.syncookies: 1
#########################
SYN cookies是一種用於通過選擇加密的初始化TCP序列號,可以對回應的包做驗證來降低SYN'洪水'攻擊的影響的技術。
默認即是,不需修改
########################
net.inet.tcp.msl: 30000
#######################
這個值網上很多文章都推薦的7500,
還可以改的更小一些(如2000或2500),這樣可以加快不正常連接的釋放過程(三次握手2秒、FIN_WAIT4秒)。
#########################
net.inet.tcp.always_keepalive: 1
###########################
幫助系統清除沒有正常斷開的TCP連接,這增加了一些網絡帶寬的使用,但是一些死掉的連接最終能被識別並清除。
死的TCP連接是被撥號用戶存取的系統的一個特別的問題,因為用戶經常斷開modem而不正確的關閉活動的連接。
#############################
net.inet.udp.checksum: 1
#########################
防止不正確的udp包的攻擊,默認即是,不需修改
##############################
net.inet.udp.log_in_vain: 0
#######################
記錄下任何UDP連接,這個一般情況下不應該修改。
#######################
net.inet.udp.blackhole: 0
####################
建議設置為1,接收到一個已經關閉的端口發來的所有UDP包直接drop
#######################
net.inet.raw.maxdgram: 8192
#########################
Maximum outgoing raw IP datagram size
很多文章建議設置為65536,好像沒多大必要。
######################################
net.inet.raw.recvspace: 8192
######################
Maximum incoming raw IP datagram size
很多文章建議設置為65536,好像沒多大必要。
#######################
net.link.ether.inet.max_age: 1200
####################
調整ARP清理的時間,通過向IP路由緩衝填充偽造的ARP條目可以讓惡意用戶產生資源耗竭和性能減低攻擊。
這項似乎大家都未做改動,我建議不動或者稍微減少,比如300(HP-UX默認的5分鐘)
#######################
net.inet6.ip6.redirect: 1
###############################
設置為0,屏蔽ipv6重定向功能
###########################
net.isr.direct: 0
#################http://www.bsdlover.cn#########
所有MPSAFE的網絡ISR對包做立即響應,提高網卡性能,設置為1。
####################################
hw.ata.wc: 1
#####################
這個選項用來打開 IDE 硬盤快取。當打開時,如果有數據要寫入硬盤時,硬盤會假裝已完成寫入,並將數據快取起來。
這種作法會加速硬盤的存取速度,但當系統異常關機時,比較容易造成數據遺失。
不過由於關閉這個功能所帶來的速度差異實在太大,建議還是保留原本打開的狀態吧,不做修改。
###################
security.bsd.see_other_uids: 1
security.bsd.see_other_gids: 1
#####################
不允許用戶看到其他用戶的進程,因此應該改成0,
#######################
摘自:http://www.bsdlover.cn/security/2007/1216/article_8.html
摘自:http://www.backup.idv.tw/viewtopic.php?t=1920&sid=cb7f670708731544b193c2d29f7d0931
因此轉載請註明鏈接地址: http://www.bsdlover.cn/security/2007/1216/article_8.html
如果您有補充或修訂意見,請於本文後評論或郵件聯繫 cujxtm@gmail.com,萬分感謝!
###################
所有rfc相關的選項都是默認啟用的,因此網上的那些還自己寫rfc支持的都可以扔掉了:)
###############################
net.inet.ip.sourceroute=0
net.inet.ip.accept_sourceroute=0
#############################
通過源路由,攻擊者可以嘗試到達內部IP地址 --包括RFC1918中的地址,所以
不接受源路由信息包可以防止你的內部網絡被探測。
#################################
net.inet.tcp.drop_synfin=1
###################################
安全參數,編譯內核的時候加了options TCP_DROP_SYNFIN才可以用,可以阻止某些OS探測。
##################################
kern.maxvnodes=8446
#################http://www.bsdlover.cn#########
vnode 是對文件或目錄的一種內部表達。 因此, 增加可以被操作系統利用的 vnode 數量將降低磁盤的 I/O。
一般而言, 這是由操作系統自行完成的,也不需要加以修改。但在某些時候磁盤 I/O 會成為瓶頸,
而系統的 vnode 不足, 則這一配置應被增加。此時需要考慮是非活躍和空閒內存的數量。
要查看當前在用的 vnode 數量:
# sysctl vfs.numvnodes
vfs.numvnodes: 91349
要查看最大可用的 vnode 數量:
# sysctl kern.maxvnodes
kern.maxvnodes: 100000
如果當前的 vnode 用量接近最大值,則將 kern.maxvnodes 值增大 1,000 可能是個好主意。
您應繼續查看 vfs.numvnodes 的數值, 如果它再次攀升到接近最大值的程度,
仍需繼續提高 kern.maxvnodes。 在 top(1) 中顯示的內存用量應有顯著變化,
更多內存會處於活躍 (active) 狀態。
####################################
kern.maxproc: 964
#################http://www.bsdlover.cn#########
Maximum number of processes
####################################
kern.maxprocperuid: 867
#################http://www.bsdlover.cn#########
Maximum processes allowed per userid
####################################
因為我的maxusers設置的是256,20+16*maxusers=4116。
maxprocperuid至少要比maxproc少1,因為init(8) 這個系統程序絕對要保持在運作狀態。
我給它設置的2068。
kern.maxfiles: 1928
#################http://www.bsdlover.cn#########
系統中支持最多同時開啟的文件數量,如果你在運行數據庫或大的很吃描述符的進程,那麼應該設置在20000以上,
比如kde這樣的桌面環境,它同時要用的文件非常多。
一般推薦設置為32768或者65536。
####################################
kern.argmax: 262144
#################http://www.bsdlover.cn#########
maximum number of bytes (or characters) in an argument list.
命令行下最多支持的參數,比如你在用find命令來批量刪除一些文件的時候
find . -name "*.old" -delete,如果文件數超過了這個數字,那麼會提示你數字太多的。
可以利用find . -name "*.old" -ok rm {} \;來刪除。
默認的參數已經足夠多了,因此不建議再做修改。
####################################
kern.securelevel: -1
#################http://www.bsdlover.cn#########
-1:這是系統默認級別,沒有提供任何內核的保護錯誤;
0:基本上作用不多,當你的系統剛啟動就是0級別的,當進入多用戶模式的時候就自動變成1級了。
1:在這個級別上,有如下幾個限制:
a. 不能通過kldload或者kldunload加載或者卸載可加載內核模塊;
b. 應用程序不能通過/dev/mem或者/dev/kmem直接寫內存;
c. 不能直接往已經裝在(mounted)的磁盤寫東西,也就是不能格式化磁盤,但是可以通過標準的內核接口執行寫操作;
d. 不能啟動X-windows,同時不能使用chflags來修改文件屬性;
2:在 1 級別的基礎上還不能寫沒裝載的磁盤,而且不能在1秒之內製造多次警告,這個是防止DoS控制台的;
3:在 2 級別的級別上不允許修改IPFW防火牆的規則。
如果你已經裝了防火牆,並且把規則設好了,不輕易改動,那麼建議使用3級別,如果你沒有裝防火牆,而且還準備裝防火牆的話,不建議使用。
我們這裡推薦使用 2 級別,能夠避免比較多對內核攻擊。
####################################
kern.maxfilesperproc: 1735
#################http://www.bsdlover.cn#########
每個進程能夠同時打開的最大文件數量,網上很多資料寫的是32768
除非用異步I/O或大量線程,打開這麼多的文件恐怕是不太正常的。
我個人建議不做修改,保留默認。
####################################
kern.ipc.maxsockbuf: 262144
#################http://www.bsdlover.cn#########
最大的套接字緩衝區,網上有建議設置為2097152(2M)、8388608(8M)的。
我個人倒是建議不做修改,保持默認的256K即可,緩衝區大了可能造成碎片、阻塞或者丟包。
####################################
kern.ipc.somaxconn: 128
#################http://www.bsdlover.cn#########
最大的等待連接完成的套接字隊列大小,即並發連接數。
高負載服務器和受到Dos攻擊的系統也許會因為這個隊列被塞滿而不能提供正常服務。
默認為128,推薦在1024-4096之間,根據機器和實際情況需要改動,數字越大佔用內存也越大。
####################################
kern.ipc.nmbclusters: 4800
#################http://www.bsdlover.cn#########
這個值用來調整系統在開機後所要分配給網絡 mbufs 的 cluster 數量,
由於每個 cluster 大小為 2K,所以當這個值為 1024 時,也是會用到 2MB 的核心內存空間。
假設我們的網頁同時約有 1000 個聯機,而 TCP 傳送及接收的暫存區大小都是 16K,
則最糟的情況下,我們會需要 (16K+16K) * 1024,也就是 32MB 的空間,
然而所需的 mbufs 大概是這個空間的二倍,也就是 64MB,所以所需的 cluster 數量為 64MB/2K,也就是 32768。
對於內存有限的機器,建議值是 1024 到 4096 之間,而當擁有海量存儲器空間時,我們可以將它設定為 4096 到 32768 之間。
我們可以使用 netstat 這個指令並加上參數 -m 來查看目前所使用的 mbufs 數量。
要修改這個值必須在一開機就修改,所以只能在 /boot/loader.conf 中加入修改的設定
kern.ipc.nmbclusters=32768
####################################
kern.ipc.shmmax: 33554432
#################http://www.bsdlover.cn#########
共享內存和信號燈("System VIPC")如果這些過小的話,有些大型的軟件將無法啟動
安裝xine和mplayer提示的設置為67108864,即64M,
如果內存多的話,可以設置為134217728,即128M
####################################
kern.ipc.shmall: 8192
#################http://www.bsdlover.cn#########
共享內存和信號燈("System VIPC")如果這些過小的話,有些大型的軟件將無法啟動
安裝xine和mplayer提示的設置為32768
####################################
kern.ipc.shm_use_phys: 0
#################http://www.bsdlover.cn#########
如果我們將它設成 1,則所有 System V 共享內存 (share memory,一種程序間溝通的方式)部份都會被留在實體的內存 (physical memory) 中,
而不會被放到硬盤上的 swap 空間。我們知道物理內存的存取速度比硬盤快許多,而當物理內存空間不足時,
部份數據會被放到虛擬的內存上,從物理內存和虛擬內存之間移轉的動作就叫作 swap。如果時常做 swap 的動作,
則需要一直對硬盤作 I/O,速度會很慢。因此,如果我們有大量的程序 (數百個) 需要共同分享一個小的共享內存空間,
或者是共享內存空間很大時,我們可以將這個值打開。
這一項,我個人建議不做修改,除非你的內存非常大。
####################################
kern.ipc.shm_allow_removed: 0
#################http://www.bsdlover.cn#########
共享內存是否允許移除?這項似乎是在fb下裝vmware需要設置為1的,否則會有加載SVGA出錯的提示
作為服務器,這項不動也罷。
####################################
kern.ipc.numopensockets: 12
#################http://www.bsdlover.cn#########
已經開啟的socket數目,可以在最繁忙的時候看看它是多少,然後就可以知道maxsockets應該設置成多少了。
####################################
kern.ipc.maxsockets: 1928
#################http://www.bsdlover.cn#########
這是用來設定系統最大可以開啟的 socket 數目。如果您的服務器會提供大量的 FTP 服務,
而且常快速的傳輸一些小檔案,您也許會發現常傳輸到一半就中斷。因為 FTP 在傳輸檔案時,
每一個檔案都必須開啟一個 socket 來傳輸,但關閉 socket 需要一段時間,如果傳輸速度很快,
而檔案又多,則同一時間所開啟的 socket 會超過原本系統所許可的值,這時我們就必須把這個值調大一點。
除了 FTP 外,也許有其它網絡程序也會有這種問題。
然而,這個值必須在系統一開機就設定好,所以如果要修改這項設定,我們必須修改 /boot/loader.conf 才行
kern.ipc.maxsockets="16424"
####################################
kern.ipc.nsfbufs: 1456
#################http://www.bsdlover.cn#########
經常使用 sendfile(2) 系統調用的繁忙的服務器,
有必要通過 NSFBUFS 內核選項或者在 /boot/loader.conf (查看 loader(8) 以獲得更多細節) 中設置它的值來調節 sendfile(2) 緩存數量。
這個參數需要調節的普通原因是在進程中看到 sfbufa 狀態。sysctl kern.ipc.nsfbufs 變量在內核配置變量中是只讀的。
這個參數是由 kern.maxusers 決定的,然而它可能有必要因此而調整。
在/boot/loader.conf裡加入
kern.ipc.nsfbufs="2496"
####################################
kern.maxusers: 59
#################http://www.bsdlover.cn#########
maxusers 的值決定了處理程序所容許的最大值,20+16*maxusers 就是你將得到的所容許處理程序。
系統一開機就必須要有 18 個處理程序 (process),即便是簡單的執行指令 man 又會產生 9 個 process,
所以將這個值設為 64 應該是一個合理的數目。
如果你的系統會出現 proc table full 的訊息的話,可以就把它設大一點,例如 128。
除非您的系統會需要同時開啟很多檔案,否則請不要設定超過 256。
可以在 /boot/loader.conf 中加入該選項的設定,
kern.maxusers=256
####################################
kern.coredump: 1
#################http://www.bsdlover.cn#########
如果設置為0,則程序異常退出時不會生成core文件,作為服務器,不建議這樣。
####################################
kern.corefile: %N.core
#################http://www.bsdlover.cn#########
可設置為kern.corefile="/data/coredump/%U-%P-%N.core"
其中 %U是UID,%P是進程ID,%N是進程名,當然/data/coredump必須是一個實際存在的目錄
####################################
vm.swap_idle_enabled: 0
vm.swap_idle_threshold1: 2
vm.swap_idle_threshold2: 10
#########################
在有很多用戶進入、離開系統和有很多空閒進程的大的多用戶系統中很有用。
可以讓進程更快地進入內存,但它會吃掉更多的交換和磁盤帶寬。
系統默認的頁面調度算法已經很好了,最好不要更改。
########################
vfs.ufs.dirhash_maxmem: 2097152
#########################
默認的dirhash最大內存,默認2M
增加它有助於改善單目錄超過100K個文件時的反覆讀目錄時的性能
建議修改為33554432(32M)
#############################
vfs.vmiodirenable: 1
#################
這個變量控制目錄是否被系統緩存。大多數目錄是小的,在系統中只使用單個片斷(典型的是1K)並且在緩存中使用的更小 (典型的是512字節)。
當這個變量設置為關閉 (0) 時,緩存器僅僅緩存固定數量的目錄,即使您有很大的內存。
而將其開啟 (設置為1) 時,則允許緩存器用 VM 頁面緩存來緩存這些目錄,讓所有可用內存來緩存目錄。
不利的是最小的用來緩存目錄的核心內存是大於 512 字節的物理頁面大小(通常是 4k)。
我們建議如果您在運行任何操作大量文件的程序時保持這個選項打開的默認值。
這些服務包括 web 緩存,大容量郵件系統和新聞系統。
儘管可能會浪費一些內存,但打開這個選項通常不會降低性能。但還是應該檢驗一下。
####################
vfs.hirunningspace: 1048576
############################
這個值決定了系統可以將多少數據放在寫入儲存設備的等候區。通常使用默認值即可,
但當我們有多顆硬盤時,我們可以將它調大為 4MB 或 5MB。
注意這個設置成很高的值(超過緩存器的寫極限)會導致壞的性能。
不要盲目的把它設置太高!高的數值會導致同時發生的讀操作的遲延。
#############################
vfs.write_behind: 1
#########################
這個選項預設為 1,也就是打開的狀態。在打開時,在系統需要寫入數據在硬盤或其它儲存設備上時,
它會等到收集了一個 cluster 單位的數據後再一次寫入,否則會在一個暫存區空間有寫入需求時就立即寫到硬盤上。
這個選項打開時,對於一個大的連續的文件寫入速度非常有幫助。但如果您遇到有很多行程延滯在等待寫入動作時,您可能必須關閉這個功能。
############################
net.local.stream.sendspace: 8192
##################################
本地套接字連接的數據發送空間
建議設置為65536
###################################
net.local.stream.recvspace: 8192
##################################
本地套接字連接的數據接收空間
建議設置為65536
###################################
net.inet.ip.portrange.lowfirst: 1023
net.inet.ip.portrange.lowlast: 600
net.inet.ip.portrange.first: 49152
net.inet.ip.portrange.last: 65535
net.inet.ip.portrange.hifirst: 49152
net.inet.ip.portrange.hilast: 65535
###################
以上六項是用來控制TCP及UDP所使用的port範圍,這個範圍被分成三個部份,低範圍、預設範圍、及高範圍。
這些是你的服務器主動發起連接時的臨時端口的範圍,預設的已經1萬多了,一般的應用就足夠了。
如果是比較忙碌的FTP server,一般也不會同時提供給1萬多人訪問的,
當然如果很不幸,你的服務器就要提供很多,那麼可以修改first的值,比如直接用1024開始
#########################
net.inet.ip.redirect: 1
#########################
設置為0,屏蔽ip重定向功能
###########################
net.inet.ip.rtexpire: 3600
net.inet.ip.rtminexpire: 10
########################
很多apache產生的CLOSE_WAIT狀態,這種狀態是等待客戶端關閉,但是客戶端那邊並沒有正常的關閉,於是留下很多這樣的東東。
建議都修改為2
#########################
net.inet.ip.intr_queue_maxlen: 50
########################
Maximum size of the IP input queue,如果下面的net.inet.ip.intr_queue_drops一直在增加,
那就說明你的隊列空間不足了,那麼可以考慮增加該值。
##########################
net.inet.ip.intr_queue_drops: 0
####################
Number of packets dropped from the IP input queue,如果你sysctl它一直在增加,
那麼增加net.inet.ip.intr_queue_maxlen的值。
#######################
net.inet.ip.fastforwarding: 0
#############################
如果打開的話每個目標地址一次轉發成功以後它的數據都將被記錄進路由表和arp數據表,節約路由的計算時間
但會需要大量的內核內存空間來保存路由表。
如果內存夠大,打開吧,呵呵
#############################
net.inet.ip.random_id: 0
#####################
默認情況下,ip包的id號是連續的,而這些可能會被攻擊者利用,比如可以知道你nat後面帶了多少主機。
如果設置成1,則這個id號是隨機的,嘿嘿。
#####################
net.inet.icmp.maskrepl: 0
############################
防止廣播風暴,關閉其他廣播探測的響應。默認即是,無須修改。
###############################
net.inet.icmp.icmplim: 200
##############################
限制系統發送ICMP速率,改為100吧,或者保留也可,並不會給系統帶來太大的壓力。
###########################
net.inet.icmp.icmplim_output: 1
###################################
如果設置成0,就不會看到提示說Limiting icmp unreach response from 214 to 200 packets per second 等等了
不過禁止輸出容易讓我們忽視攻擊的存在。這個自己看著辦吧。
######################################
net.inet.icmp.drop_redirect: 0
net.inet.icmp.log_redirect: 0
###################################
設置為1,屏蔽ICMP重定向功能
###################################
net.inet.icmp.bmcastecho: 0
############################
防止廣播風暴,關閉廣播ECHO響應,默認即是,無須修改。
###############################
net.inet.tcp.mssdflt: 512
net.inet.tcp.minmss: 216
###############################
數據包數據段最小值,以上兩個選項最好不動!或者只修改mssdflt為1460,minmss不動。
原因詳見http://www.bsdlover.cn/security/2007/1211/article_4.html
#############################
net.inet.tcp.keepidle: 7200000
######################
TCP的套接字的空閒時間,默認時間太長,可以改為600000(10分鐘)。
##########################
net.inet.tcp.sendspace: 32768
#################http://www.bsdlover.cn#########
最大的待發送TCP數據緩衝區空間,應用程序將數據放到這裡就認為發送成功了,系統TCP堆棧保證數據的正常發送。
####################################
net.inet.tcp.recvspace: 65536
###################################
最大的接受TCP緩衝區空間,系統從這裡將數據分發給不同的套接字,增大該空間可提高系統瞬間接受數據的能力以提高性能。
###################################
這二個選項分別控制了網絡 TCP 聯機所使用的傳送及接收暫存區的大小。預設的傳送暫存區為 32K,而接收暫存區為 64K。
如果需要加速 TCP 的傳輸,可以將這二個值調大一點,但缺點是太大的值會造成系統核心佔用太多的內存。
如果我們的機器會同時服務數百或數千個網絡聯機,那麼這二個選項最好維持默認值,否則會造成系統核心內存不足。
但如果我們使用的是 gigabite 的網絡,將這二個值調大會有明顯效能的提升。
傳送及接收的暫存區大小可以分開調整,
例如,假設我們的系統主要做為網頁服務器,我們可以將接收的暫存區調小一點,並將傳送的暫存區調大,如此一來,我們就可以避免佔去太多的核心內存空間。
net.inet.udp.maxdgram: 9216
#########################
最大的發送UDP數據緩衝區大小,網上的資料大多都是65536,我個人認為沒多大必要,
如果要調整,可以試試24576。
##############################
net.inet.udp.recvspace: 42080
##################
最大的接受UDP緩衝區大小,網上的資料大多都是65536,我個人認為沒多大必要,
如果要調整,可以試試49152。
#######################
以上四項配置通常不會導致問題,一般說來網絡流量是不對稱的,因此應該根據實際情況調整,並觀察其效果。
如果我們將傳送或接收的暫存區設為大於 65535,除非服務器本身及客戶端所使用的操作系統都支持 TCP 協議的 windows scaling extension (請參考 RFC 1323 文件)。
FreeBSD默認已支持 rfs1323 (即 sysctl 的 net.inet.tcp.rfc1323 選項)。
###################################################
net.inet.tcp.log_in_vain: 0
##################
記錄下任何TCP連接,這個一般情況下不應該更改。
####################
net.inet.tcp.blackhole: 0
##################################
建議設置為2,接收到一個已經關閉的端口發來的所有包,直接drop,如果設置為1則是只針對TCP包
#####################################
net.inet.tcp.delayed_ack: 1
###########################
當一台計算機發起TCP連接請求時,系統會回應ACK應答數據包。
該選項設置是否延遲ACK應答數據包,把它和包含數據的數據包一起發送。
在高速網絡和低負載的情況下會略微提高性能,但在網絡連接較差的時候,
對方計算機得不到應答會持續發起連接請求,反而會讓網絡更加擁堵,降低性能。
因此這個值我建議您看情況而定,如果您的網速不是問題,可以將封包數量減少一半
如果網絡不是特別好,那麼就設置為0,有請求就先回應,這樣其實浪費的網通、電信的帶寬速率而不是你的處理時間:)
############################
net.inet.tcp.inflight.enable: 1
net.inet.tcp.inflight.debug: 0
net.inet.tcp.inflight.rttthresh: 10
net.inet.tcp.inflight.min: 6144
net.inet.tcp.inflight.max: 1073725440
net.inet.tcp.inflight.stab: 20
###########################
限制 TCP 帶寬延遲積和 NetBSD 的 TCP/Vegas 類似。
它可以通過將 sysctl 變量 net.inet.tcp.inflight.enable 設置成 1 來啟用。
系統將嘗試計算每一個連接的帶寬延遲積,並將排隊的數據量限制在恰好能保持最優吞吐量的水平上。
這一特性在您的服務器同時向使用普通調製解調器,千兆以太網,乃至更高速度的光與網絡連接 (或其他帶寬延遲積很大的連接) 的時候尤為重要,
特別是當您同時使用滑動窗縮放,或使用了大的發送窗口的時候。
如果啟用了這個選項,您還應該把 net.inet.tcp.inflight.debug 設置為 0 (禁用調試),
對於生產環境而言, 將 net.inet.tcp.inflight.min 設置成至少 6144 會很有好處。
然而, 需要注意的是,這個值設置過大事實上相當於禁用了連接帶寬延遲積限制功能。
這個限制特性減少了在路由和交換包隊列的堵塞數據數量,也減少了在本地主機接口隊列阻塞的數據的數量。
在少數的等候隊列中、交互式連接,尤其是通過慢速的調製解調器,也能用低的 往返時間操作。
但是,注意這只影響到數據發送 (上載/服務端)。對數據接收(下載)沒有效果。
調整 net.inet.tcp.inflight.stab 是 不 推薦的。
這個參數的默認值是 20,表示把 2 個最大包加入到帶寬延遲積窗口的計算中。
額外的窗口似的算法更為穩定,並改善對於多變網絡環境的相應能力,
但也會導致慢速連接下的 ping 時間增長 (儘管還是會比沒有使用 inflight 算法低許多)。
對於這些情形, 您可能會希望把這個參數減少到 15, 10, 或 5;
並可能因此而不得不減少 net.inet.tcp.inflight.min (比如說, 3500) 來得到希望的效果。
減少這些參數的值, 只應作為最後不得已時的手段來使用。
############################
net.inet.tcp.syncookies: 1
#########################
SYN cookies是一種用於通過選擇加密的初始化TCP序列號,可以對回應的包做驗證來降低SYN'洪水'攻擊的影響的技術。
默認即是,不需修改
########################
net.inet.tcp.msl: 30000
#######################
這個值網上很多文章都推薦的7500,
還可以改的更小一些(如2000或2500),這樣可以加快不正常連接的釋放過程(三次握手2秒、FIN_WAIT4秒)。
#########################
net.inet.tcp.always_keepalive: 1
###########################
幫助系統清除沒有正常斷開的TCP連接,這增加了一些網絡帶寬的使用,但是一些死掉的連接最終能被識別並清除。
死的TCP連接是被撥號用戶存取的系統的一個特別的問題,因為用戶經常斷開modem而不正確的關閉活動的連接。
#############################
net.inet.udp.checksum: 1
#########################
防止不正確的udp包的攻擊,默認即是,不需修改
##############################
net.inet.udp.log_in_vain: 0
#######################
記錄下任何UDP連接,這個一般情況下不應該修改。
#######################
net.inet.udp.blackhole: 0
####################
建議設置為1,接收到一個已經關閉的端口發來的所有UDP包直接drop
#######################
net.inet.raw.maxdgram: 8192
#########################
Maximum outgoing raw IP datagram size
很多文章建議設置為65536,好像沒多大必要。
######################################
net.inet.raw.recvspace: 8192
######################
Maximum incoming raw IP datagram size
很多文章建議設置為65536,好像沒多大必要。
#######################
net.link.ether.inet.max_age: 1200
####################
調整ARP清理的時間,通過向IP路由緩衝填充偽造的ARP條目可以讓惡意用戶產生資源耗竭和性能減低攻擊。
這項似乎大家都未做改動,我建議不動或者稍微減少,比如300(HP-UX默認的5分鐘)
#######################
net.inet6.ip6.redirect: 1
###############################
設置為0,屏蔽ipv6重定向功能
###########################
net.isr.direct: 0
#################http://www.bsdlover.cn#########
所有MPSAFE的網絡ISR對包做立即響應,提高網卡性能,設置為1。
####################################
hw.ata.wc: 1
#####################
這個選項用來打開 IDE 硬盤快取。當打開時,如果有數據要寫入硬盤時,硬盤會假裝已完成寫入,並將數據快取起來。
這種作法會加速硬盤的存取速度,但當系統異常關機時,比較容易造成數據遺失。
不過由於關閉這個功能所帶來的速度差異實在太大,建議還是保留原本打開的狀態吧,不做修改。
###################
security.bsd.see_other_uids: 1
security.bsd.see_other_gids: 1
#####################
不允許用戶看到其他用戶的進程,因此應該改成0,
#######################
摘自:http://www.bsdlover.cn/security/2007/1216/article_8.html
摘自:http://www.backup.idv.tw/viewtopic.php?t=1920&sid=cb7f670708731544b193c2d29f7d0931
2009年3月4日 星期三
Apache設定限制目錄瀏覽的方法
很多人設定Apache都會碰到的問題之一,就是該怎麼限制別人瀏覽自己網站的目錄。如果沒限制,目錄內所有檔案的位置都會被看到,有更新但還未公開在首頁的檔案就會被看到。
以這個網站的目錄來說(不好意思我拿這個站當範例),就是可以瀏覽該目錄內的所有文件。
有一種很簡單但沒效率的作法是在你不想公開給外面看到的每個目錄下面,都放一個內容空白的index.html,讀取該目錄就會出現空白或你寫在該檔案設定的轉址頁面,但這僅適合用在免費網頁空間,一般不建議這樣使用。另一種方式則是使用.htaccess檔案,藉由裡面的規則來限定存取範圍,但設定上還是有些麻煩之處。
我個人最喜歡,又覺得好設定的方法就是修改Apache的設定檔httpd.conf。該怎麼做呢?
首先,用文字編輯器打開Apache的設定檔httpd.conf,找到設定文件目錄區塊中的這一行:
Options Indexes FollowSymLinks MultiViews
改成這樣存檔後,重新啟動Apache即可:
Options FollowSymLinks MultiViews
之所以去掉Indexes這個功能,是讓Apache不自動產生目錄的索引,就不會出現前面燦坤網站某一個文件目錄列出目錄頁面的情形。如果你的Apache有將Indexes拿掉,點選連結目錄就不會秀出目錄來,會改成403 forbidden的訊息頁面。
這裡有個範例可以參考,魅力站的mallist目錄是限制存取的。
403 forbidden意味著該頁面禁止存取,也達到避免目錄被看光光的目的。至於MultiViews這是可以讓Apache送出多國語言支援的頁面,FollowSymLinks是讓Apache能夠連到其它的目錄去執行,如果是Windows系統的使用者,將這個功能拿掉比較好。
如果覺得這個403之類的錯誤訊息提示頁面不好看的話,請看這篇自訂Apache的錯誤訊息頁面,就可以自訂了。
摘自:http://yblog.org/archive/index.php/5580
以這個網站的目錄來說(不好意思我拿這個站當範例),就是可以瀏覽該目錄內的所有文件。
有一種很簡單但沒效率的作法是在你不想公開給外面看到的每個目錄下面,都放一個內容空白的index.html,讀取該目錄就會出現空白或你寫在該檔案設定的轉址頁面,但這僅適合用在免費網頁空間,一般不建議這樣使用。另一種方式則是使用.htaccess檔案,藉由裡面的規則來限定存取範圍,但設定上還是有些麻煩之處。
我個人最喜歡,又覺得好設定的方法就是修改Apache的設定檔httpd.conf。該怎麼做呢?
首先,用文字編輯器打開Apache的設定檔httpd.conf,找到設定文件目錄區塊中的這一行:
Options Indexes FollowSymLinks MultiViews
改成這樣存檔後,重新啟動Apache即可:
Options FollowSymLinks MultiViews
之所以去掉Indexes這個功能,是讓Apache不自動產生目錄的索引,就不會出現前面燦坤網站某一個文件目錄列出目錄頁面的情形。如果你的Apache有將Indexes拿掉,點選連結目錄就不會秀出目錄來,會改成403 forbidden的訊息頁面。
這裡有個範例可以參考,魅力站的mallist目錄是限制存取的。
403 forbidden意味著該頁面禁止存取,也達到避免目錄被看光光的目的。至於MultiViews這是可以讓Apache送出多國語言支援的頁面,FollowSymLinks是讓Apache能夠連到其它的目錄去執行,如果是Windows系統的使用者,將這個功能拿掉比較好。
如果覺得這個403之類的錯誤訊息提示頁面不好看的話,請看這篇自訂Apache的錯誤訊息頁面,就可以自訂了。
摘自:http://yblog.org/archive/index.php/5580
[Debug]shell script 'Syntax error: word unexpected (expecting ")")'
The reason that works on Linux and not on FreeBSD is that on Linux "sh" is really bash. On FreeBSD, sh is the bourne shell and bash is bash. Bash will run all sh scripts, but sh will not run all bash scripts. Bash extends the sh language. That script is a bash script, not a sh script.
所以
sh xx.sh 改用 bash xx.sh
即可
所以
sh xx.sh 改用 bash xx.sh
即可
訂閱:
文章 (Atom)