亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Verzeichnis suchen
首頁 版本說明 從1.3升級到2.0 編譯時配置的改變 運行時配置的改變 雜項變化 第三方模塊 從 2.0 升級到 2.2 編譯時配置的改變 運行時配置的改變 雜項變化 第三方模塊 Apache 2.1/2.2 版本的新特性 核心增強 模塊增強 程序增強 針對模塊開發(fā)者的變化 Apache 2.0 版本的新特性 核心的增強 模塊的增強 Apache許可證 參考手冊 編譯與安裝 針對心急者的概述 要求 下載 解壓 配置源代碼樹 編譯 安裝 配置 測試 升級 啟動 Apache是怎樣啟動的 啟動時發(fā)生錯誤 隨系統(tǒng)啟動時啟動 額外信息 停止與重新啟動 簡介 立即停止 優(yōu)雅重啟 立即重啟 優(yōu)雅停止 附錄:信號和競爭條件 運行時配置指令 主配置文件 配置文件的語法 模塊 指令的作用域 .htaccess文件 配置段 配置段(容器)的類型 文件系統(tǒng)和網(wǎng)絡(luò)空間 虛擬主機 代理 允許使用哪些指令? 配置段的合并 內(nèi)容緩沖 簡介 緩沖概述 安全方面的考慮 文件句柄緩沖 內(nèi)存緩沖 磁盤緩沖 服務(wù)器全局配置 服務(wù)器標(biāo)識 文件定位 限制資源的使用 日志文件 安全警告 錯誤日志 訪問日志 日志滾動 管道日志 虛擬主機 其他日志文件 從URL到文件系統(tǒng)的映射 相關(guān)模塊和指令 DocumentRoot DocumentRoot以外的文件 用戶目錄 URL重定向 反向代理 重寫引擎 File Not Found 安全方面的提示 保持不斷更新和升級 ServerRoot目錄的權(quán)限 服務(wù)器端包含 關(guān)于CGI 未指定為腳本的CGI 指定為腳本的CGI 其他動態(tài)內(nèi)容的來源 系統(tǒng)設(shè)置的保護(hù) 默認(rèn)配置下服務(wù)器文件的保護(hù) 觀察日志文件 動態(tài)共享對象(DSO) 實現(xiàn) 用法概要 背景知識 優(yōu)點和缺點 內(nèi)容協(xié)商 關(guān)于內(nèi)容協(xié)商 Apache中的內(nèi)容協(xié)商 協(xié)商的方法 打亂品質(zhì)值 透明內(nèi)容協(xié)商的擴展 超鏈和名稱轉(zhuǎn)換說明 緩沖說明 更多信息 自定義錯誤響應(yīng) 行為 配置 自定義錯誤響應(yīng)與重定向 地址和端口綁定 概述 針對IPv6的特殊考慮 怎樣與虛擬主機協(xié)同工作 多路處理模塊(MPM) 簡介 選擇一個MPM 默認(rèn)的MPM 環(huán)境變量 設(shè)置環(huán)境變量 使用環(huán)境變量 用于特殊目的的環(huán)境變量 示例 處理器的使用 什么是處理器? 例子 程序員注意事項 過濾器 Apache2中的過濾器 智能過慮 使用過濾器 CGI腳本的Suexec執(zhí)行 開始之前 suEXEC的安全模型 配置和安裝suEXEC 啟用和禁用suEXEC 使用suEXEC 調(diào)試suEXEC 謹(jǐn)防Jabberwock:警告和舉例 性能調(diào)整 硬件和操作系統(tǒng) 運行時的配置 編譯時的配置 附錄:蹤跡的詳細(xì)分析 URL重寫指南 mod_rewrite簡介 實踐方案 URL的規(guī)劃 內(nèi)容的處理 對訪問的限制 其他 虛擬主機文檔 總述 虛擬主機支持 配置指令 基于主機名的虛擬主機 基于域名的虛擬主機和基于IP的虛擬主機比較 使用基于域名的虛擬主機 與舊版瀏覽器的兼容性 基于IP地址的虛擬主機 系統(tǒng)需求 如何配置Apache 設(shè)置多個守護(hù)進(jìn)程 配置擁有多個虛擬主機的單一守護(hù)進(jìn)程 動態(tài)配置大量虛擬主機 動機 概述 簡單的動態(tài)虛擬主機 一個實際的個人主頁系統(tǒng) 在同一個服務(wù)器上架設(shè)多個主機的虛擬系統(tǒng) 更為有效的基于IP地址的虛擬主機 使用老版本的Apache 使用mod_rewrite實現(xiàn)簡單的動態(tài)虛擬主機 使用mod_rewrite的個人主頁系統(tǒng) 使用獨立的虛擬主機配置文件 虛擬主機的普通配置示例 在一個IP地址上運行多個基于域名的web站點 在多于一個IP的情況下使用基于域名的虛擬主機 在不同的IP的地址(比如一個內(nèi)部和一個外部地址)上提供相同的內(nèi)容 在不同的端口上運行不同的站點 建立基于IP的虛擬主機 混用基于端口和基于IP的虛擬主機 混用基于域名和基于IP的虛擬主機 將虛擬主機和代理模塊一起使用 使用默認(rèn)虛擬主機 將一個基于域名的虛擬主機移植為一個基于IP的虛擬主機 使用ServerPath指令 深入討論虛擬主機的匹配 解析配置文件 虛擬主機匹配 小技巧 文件描述符限制 關(guān)于DNS和Apache 一個簡單示例 拒絕服務(wù) "主服務(wù)器"地址 避免這些問題的小技巧 附錄:進(jìn)一步的提示 常見問題 概述 SSL/TLS 加密 概述 文檔 mod_ssl 緒論 密碼技術(shù) 證書 安全套接字層(SSL) 參考 兼容性 配置指令 環(huán)境變量 自定義日志功能 如何... 加密方案和強制性高等級安全 客戶認(rèn)證和訪問控制 常見問題解答 About The Module Installation Configuration Certificates The SSL Protocol mod_ssl Support 如何.../指南 概述 認(rèn)證 相關(guān)模塊和指令 簡介 先決條件 啟用認(rèn)證 允許多人訪問 可能存在的問題 其他認(rèn)證方法 更多信息 CGI動態(tài)頁面 簡介 配置Apache以允許CGI 編寫CGI程序 程序還是不能運行! 幕后是怎樣操作的? CGI模塊/庫 更多信息 服務(wù)器端包含 簡介 什么是SSI? 配置服務(wù)器以允許SSI 基本SSI指令 附加的例子 我還能設(shè)置其它什么? 執(zhí)行命令 高級SSI技術(shù) 總結(jié) .htaccess文件 .htaccess文件 工作原理和使用方法 (不)使用.htaccess文件的場合 指令的生效 認(rèn)證舉例 服務(wù)器端包含(SSI)舉例 CGI舉例 疑難解答 用戶網(wǎng)站目錄 用戶網(wǎng)站目錄 用UserDir設(shè)置文件路徑 限定哪些用戶可以使用此功能 啟用對每個用戶都有效的cgi目錄 允許用戶改變配置 對特定平臺的說明 概述 Microsoft Windows 其他平臺 在Microsoft Windows中使用Apache 對操作系統(tǒng)的要求 下載 Apache for Windows 安裝 Apache for Windows 配置 Apache for Windows 以服務(wù)方式運行 Apache for Windows 作為控制臺程序運行Apache 測試安裝 編譯Windows下的Apache 系統(tǒng)要求 命令行編譯 Developer Studio集成開發(fā)環(huán)境的工作區(qū)編譯 項目組件 在Novell NetWare平臺上使用Apache Requirements Downloading Apache for NetWare Installing Apache for NetWare Running Apache for NetWare Configuring Apache for NetWare Compiling Apache for NetWare 在HP-UX中運行Apache The Apache EBCDIC Port Overview of the Apache EBCDIC Port Design Goals Technical Solution Porting Notes Document Storage Notes Apache Modules' Status Third Party Modules' Status 服務(wù)器與支持程序 概述 httpd 語法 選項 ab 語法 選項 Bugs apachectl 語法 選項 apxs 語法 選項 舉例 configure 語法 選項 環(huán)境變量 dbmmanage 語法 選項 Bugs htcacheclean 語法 選項 返回值 htdbm 語法 選項 Bugs 返回值 舉例 安全方面的考慮 限制 htdigest 語法 選項 htpasswd 語法 選項 返回值 舉例 安全方面的考慮 限制 logresolve 語法 選項 rotatelogs 語法 選項 Portability suexec 語法 選項 其他程序 log_server_status split-logfile 雜項文檔 概述 相關(guān)標(biāo)準(zhǔn) HTTP推薦標(biāo)準(zhǔn) HTML推薦標(biāo)準(zhǔn) 認(rèn)證 語言/國家代碼 Apache 模塊 描述模塊的術(shù)語 說明 狀態(tài) 源代碼文件 模塊標(biāo)識符 兼容性 描述指令的術(shù)語 說明 語法 默認(rèn)值(Default) 作用域(Context) 覆蓋項(Override) 狀態(tài) 模塊(Module) 兼容性(Compatibility) Apache核心(Core)特性 AcceptFilter AcceptPathInfo AccessFileName AddDefaultCharset AddOutputFilterByType AllowEncodedSlashes AllowOverride AuthName AuthType CGIMapExtension ContentDigest DefaultType <Directory> <DirectoryMatch> DocumentRoot EnableMMAP EnableSendfile ErrorDocument ErrorLog FileETag <Files> <FilesMatch> ForceType HostnameLookups <IfDefine> <IfModule> Include KeepAlive KeepAliveTimeout <Limit> <LimitExcept> LimitInternalRecursion LimitRequestBody LimitRequestFields LimitRequestFieldSize LimitRequestLine LimitXMLRequestBody <Location> <LocationMatch> LogLevel MaxKeepAliveRequests NameVirtualHost Options Require RLimitCPU RLimitMEM RLimitNPROC Satisfy ScriptInterpreterSource ServerAdmin ServerAlias ServerName ServerPath ServerRoot ServerSignature ServerTokens SetHandler SetInputFilter SetOutputFilter TimeOut TraceEnable UseCanonicalName UseCanonicalPhysicalPort <VirtualHost> Apache MPM 公共指令 AcceptMutex CoreDumpDirectory EnableExceptionHook GracefulShutdownTimeout Group Listen ListenBackLog LockFile MaxClients MaxMemFree MaxRequestsPerChild MaxSpareThreads MinSpareThreads PidFile ReceiveBufferSize ScoreBoardFile SendBufferSize ServerLimit StartServers StartThreads ThreadLimit ThreadsPerChild ThreadStackSize User Apache MPM beos MaxRequestsPerThread CoreDumpDirectory Group Listen ListenBacklog MaxClients MaxMemFree MaxSpareThreads MinSpareThreads PidFile ReceiveBufferSize ScoreBoardFile SendBufferSize StartThreads User Apache MPM event AcceptMutex CoreDumpDirectory EnableExceptionHook Group Listen ListenBacklog LockFile MaxClients MaxMemFree MaxRequestsPerChild MaxSpareThreads MinSpareThreads PidFile ScoreBoardFile SendBufferSize ServerLimit StartServers ThreadLimit ThreadsPerChild ThreadStackSize User Apache MPM netware MaxThreads Listen ListenBacklog MaxMemFree MaxRequestsPerChild MaxSpareThreads MinSpareThreads ReceiveBufferSize SendBufferSize StartThreads ThreadStackSize Apache MPM os2 Group Listen ListenBacklog MaxRequestsPerChild MaxSpareThreads MinSpareThreads PidFile ReceiveBufferSize SendBufferSize StartServers User Apache MPM prefork 工作方式 MaxSpareServers MinSpareServers AcceptMutex CoreDumpDirectory EnableExceptionHook Group Listen ListenBacklog LockFile MaxClients MaxMemFree MaxRequestsPerChild PidFile ReceiveBufferSize ScoreBoardFile SendBufferSize ServerLimit StartServers User Apache MPM winnt Win32DisableAcceptEx CoreDumpDirectory Listen ListenBacklog MaxMemFree MaxRequestsPerChild PidFile ReceiveBufferSize ScoreBoardFile SendBufferSize ThreadLimit ThreadsPerChild ThreadStackSize Apache MPM worker 工作方式 AcceptMutex CoreDumpDirectory EnableExceptionHook Group Listen ListenBacklog LockFile MaxClients MaxMemFree MaxRequestsPerChild MaxSpareThreads MinSpareThreads PidFile ReceiveBufferSize ScoreBoardFile SendBufferSize ServerLimit StartServers ThreadLimit ThreadsPerChild ThreadStackSize User Apache Module mod_actions Action指令 Script指令 Apache Module mod_alias 處理順序 Alias AliasMatch Redirect RedirectMatch RedirectPermanent RedirectTemp ScriptAlias ScriptAliasMatch Apache Module mod_asis 用法 Apache Module mod_auth_basic AuthBasicAuthoritative AuthBasicProvider Apache Module mod_auth_digest 使用摘要認(rèn)證 配合 MS Internet Explorer 6 工作 AuthDigestAlgorithm AuthDigestDomain AuthDigestNcCheck AuthDigestNonceFormat AuthDigestNonceLifetime AuthDigestProvider AuthDigestQop AuthDigestShmemSize Apache Module mod_authn_alias 示例 <AuthnProviderAlias> Apache Module mod_authn_anon 示例 Anonymous Anonymous_LogEmail Anonymous_MustGiveEmail Anonymous_NoUserID Anonymous_VerifyEmail Apache Module mod_authn_dbd 配置示例 AuthDBDUserPWQuery AuthDBDUserRealmQuery Apache Module mod_authn_dbm AuthDBMType AuthDBMUserFile Apache Module mod_authn_default AuthDefaultAuthoritative Apache Module mod_authn_file AuthUserFile Apache Module mod_authnz_ldap Contents Operation The require Directives 舉例 Using TLS Using SSL Using Microsoft FrontPage with mod_authnz_ldap AuthLDAPBindDN AuthLDAPBindPassword AuthLDAPCharsetConfig AuthLDAPCompareDNOnServer AuthLDAPDereferenceAliases AuthLDAPGroupAttribute AuthLDAPGroupAttributeIsDN AuthLDAPRemoteUserIsDN AuthLDAPUrl AuthzLDAPAuthoritative Apache Module mod_authz_dbm AuthDBMGroupFile AuthzDBMAuthoritative AuthzDBMType Apache Module mod_authz_default AuthzDefaultAuthoritative Apache Module mod_authz_groupfile AuthGroupFile AuthzGroupFileAuthoritative Apache Module mod_authz_host Allow Deny Order Apache Module mod_authz_owner 配置示例 AuthzOwnerAuthoritative Apache Module mod_authz_user AuthzUserAuthoritative Apache Module mod_autoindex Autoindex Request Query Arguments AddAlt AddAltByEncoding AddAltByType AddDescription AddIcon AddIconByEncoding AddIconByType DefaultIcon HeaderName IndexIgnore IndexOptions IndexOrderDefault IndexStyleSheet ReadmeName Apache Module mod_cache Related Modules and Directives 配置示例 CacheDefaultExpire CacheDisable CacheEnable CacheIgnoreCacheControl CacheIgnoreHeaders CacheIgnoreNoLastMod CacheLastModifiedFactor CacheMaxExpire CacheStoreNoStore CacheStorePrivate Apache Module mod_cern_meta MetaDir MetaFiles MetaSuffix Apache Module mod_cgi CGI 環(huán)境變量 CGI 腳本的調(diào)試 ScriptLog ScriptLogBuffer ScriptLogLength Apache Module mod_cgid ScriptSock ScriptLog ScriptLogBuffer ScriptLogLength Apache Module mod_charset_lite Common Problems CharsetDefault CharsetOptions CharsetSourceEnc Apache Module mod_dav Enabling WebDAV Security Issues Complex Configurations Dav DavDepthInfinity DavMinTimeout Apache Module mod_dav_fs DavLockDB Apache Module mod_dav_lock DavGenericLockDB Apache Module mod_dbd Connection Pooling Apache DBD API SQL Prepared Statements DBDExptime DBDKeep DBDMax DBDMin DBDParams DBDPersist DBDPrepareSQL DBDriver Apache Module mod_deflate 配置舉例 啟用壓縮 代理服務(wù)器 DeflateBufferSize DeflateCompressionLevel DeflateFilterNote DeflateMemLevel DeflateWindowSize Apache Module mod_dir DirectoryIndex DirectorySlash Apache Module mod_disk_cache CacheDirLength CacheDirLevels CacheMaxFileSize CacheMinFileSize CacheRoot Apache Module mod_dumpio 啟用dumpio支持 DumpIOInput DumpIOOutput Apache Module mod_echo ProtocolEcho Apache Module mod_env PassEnv SetEnv UnsetEnv Apache Module mod_example Compiling the example module Using the mod_example Module Example Apache Module mod_expires 交替間隔語法 ExpiresActive ExpiresByType ExpiresDefault Apache Module mod_ext_filter 舉例 ExtFilterDefine ExtFilterOptions Apache Module mod_file_cache Using mod_file_cache CacheFile MMapFile Apache Module mod_filter Smart Filtering Filter Declarations Configuring the Chain Examples Protocol Handling FilterChain FilterDeclare FilterProtocol FilterProvider FilterTrace Apache Module mod_headers 處理順序 前處理和后處理 舉例 Header RequestHeader Apache Module mod_ident IdentityCheck IdentityCheckTimeout Apache Module mod_imagemap New Features Imagemap File Example Mapfile Referencing your mapfile ImapBase ImapDefault ImapMenu Apache Module mod_include Enabling Server-Side Includes PATH_INFO with Server Side Includes Basic Elements Include Variables Variable Substitution Flow Control Elements SSIEndTag SSIErrorMsg SSIStartTag SSITimeFormat SSIUndefinedEcho XBitHack Apache Module mod_info 安全問題 選擇哪些信息可以被顯示 已知的局限 AddModuleInfo Apache Module mod_isapi 用法 附加注釋 程序員注記 ISAPIAppendLogToErrors ISAPIAppendLogToQuery ISAPICacheFile ISAPIFakeAsync ISAPILogNotSupported ISAPIReadAheadBuffer Apache Module mod_ldap 示例配置 LDAP 連接池 LDAP 緩沖 使用SSL/TLS SSL/TLS 證書 LDAPCacheEntries LDAPCacheTTL LDAPConnectionTimeout LDAPOpCacheEntries LDAPOpCacheTTL LDAPSharedCacheFile LDAPSharedCacheSize LDAPTrustedClientCert LDAPTrustedGlobalCert LDAPTrustedMode LDAPVerifyServerCert Apache Module mod_log_config 定制日志文件格式 安全考慮 BufferedLogs CookieLog CustomLog LogFormat TransferLog Apache Module mod_log_forensic 定制日志文件格式 安全考慮 ForensicLog Apache Module mod_logio 定制日志文件格式 Apache Module mod_mem_cache MCacheMaxObjectCount MCacheMaxObjectSize MCacheMaxStreamingBuffer MCacheMinObjectSize MCacheRemovalAlgorithm MCacheSize Apache Module mod_mime 帶多擴展名的文件 內(nèi)容編碼 字符集和語言 AddCharset AddEncoding AddHandler AddInputFilter AddLanguage AddOutputFilter AddType DefaultLanguage ModMimeUsePathInfo MultiviewsMatch RemoveCharset RemoveEncoding RemoveHandler RemoveInputFilter RemoveLanguage RemoveOutputFilter RemoveType TypesConfig Apache Module mod_mime_magic "Magic文件"的格式 性能問題 注意 MimeMagicFile Apache Module mod_negotiation 類型表 MultiViews CacheNegotiatedDocs ForceLanguagePriority LanguagePriority Apache Module mod_nw_ssl NWSSLTrustedCerts NWSSLUpgradeable SecureListen Apache Module mod_proxy 正向和反向代理 簡單示例 控制對代理服務(wù)器的訪問 緩慢啟動 局域網(wǎng)代理 協(xié)議調(diào)整 請求體 AllowCONNECT NoProxy <Proxy> ProxyBadHeader ProxyBlock ProxyDomain ProxyErrorOverride ProxyIOBufferSize <ProxyMatch> ProxyMaxForwards ProxyPass ProxyPassReverse ProxyPassReverseCookieDomain ProxyPassReverseCookiePath ProxyPreserveHost ProxyReceiveBufferSize ProxyRemote ProxyRemoteMatch ProxyRequests ProxyTimeout ProxyVia Apache Module mod_proxy_ajp Overview of the protocol Basic Packet Structure Request Packet Structure Response Packet Structure Apache Module mod_proxy_balancer Load balancer scheduler algorithm Request Counting Algorithm Weighted Traffic Counting Algorithm Enabling Balancer Manager Support Apache Module mod_proxy_connect Apache Module mod_proxy_ftp 為什么xxx類型的文件不能從FTP下載? 如何強制文件xxx使用FTP的ASCII形式下載? 我如何使用FTP上傳? 我如何能訪問我自己home目錄以外的FTP文件? 我如何才能在瀏覽器的URL框中隱藏FTP的明文密碼? Apache Module mod_proxy_http Apache Module mod_rewrite 特殊字符的引用 環(huán)境變量 實用方案 RewriteBase RewriteCond RewriteEngine RewriteLock RewriteLog RewriteLogLevel RewriteMap RewriteOptions RewriteRule Apache Module mod_setenvif BrowserMatch BrowserMatchNoCase SetEnvIf SetEnvIfNoCase Apache Module mod_so 為Windows創(chuàng)建可加載模塊 LoadFile LoadModule Apache Module mod_speling CheckSpelling Apache Module mod_ssl 環(huán)境變量 Custom Log Formats SSLCACertificateFile SSLCACertificatePath SSLCADNRequestFile SSLCADNRequestPath SSLCARevocationFile SSLCARevocationPath SSLCertificateChainFile SSLCertificateFile SSLCertificateKeyFile SSLCipherSuite SSLCryptoDevice SSLEngine SSLHonorCipherOrder SSLMutex SSLOptions SSLPassPhraseDialog SSLProtocol SSLProxyCACertificateFile SSLProxyCACertificatePath SSLProxyCARevocationFile SSLProxyCARevocationPath SSLProxyCipherSuite SSLProxyEngine SSLProxyMachineCertificateFile SSLProxyMachineCertificatePath SSLProxyProtocol SSLProxyVerify SSLProxyVerifyDepth SSLRandomSeed SSLRequire SSLRequireSSL SSLSessionCache SSLSessionCacheTimeout SSLUserName SSLVerifyClient SSLVerifyDepth Apache Module mod_status Enabling Status Support 自動更新 Machine Readable Status File ExtendedStatus Apache Module mod_suexec SuexecUserGroup Apache Module mod_unique_id Theory Apache Module mod_userdir UserDir Apache Module mod_usertrack Logging 2-digit or 4-digit dates for cookies? CookieDomain CookieExpires CookieName CookieStyle CookieTracking Apache Module mod_version <IfVersion> Apache Module mod_vhost_alias 目錄名稱的轉(zhuǎn)換 示例 VirtualDocumentRoot VirtualDocumentRootIP VirtualScriptAlias VirtualScriptAliasIP 開發(fā)者文檔 Overview Topics External Resources Apache API notes Basic concepts How handlers work Resource allocation and resource pools Configuration Debugging Memory Allocation in APR Available debugging options Allowable Combinations Activating Debugging Options Documenting Apache 2.0 Apache 2.0 Hook Functions Creating a hook function Hooking the hook Converting Modules from Apache 1.3 to Apache 2.0 The easier changes ... The messier changes... Request Processing in Apache 2.0 The Request Processing Cycle The Request Parsing Phase The Security Phase The Preparation Phase The Handler Phase How Filters Work in Apache 2.0 Filter Types How are filters inserted? Asis Explanations 詞匯和索引 詞匯表 模塊索引 指令索引 指令速查 譯者聲明
Figuren

CGI動態(tài)頁面

簡介

CGI(公共網(wǎng)關(guān)接口)定義了web服務(wù)器與外部內(nèi)容生成程序之間交互的方法,通常是指CGI程序或者CGI腳本,它是在網(wǎng)站上實現(xiàn)動態(tài)頁面的最簡單和常用的方法。本文將對如何在Apache web服務(wù)器上建立CGI以及如何編寫CGI程序進(jìn)行介紹。

配置Apache以允許CGI

要讓CGI程序能正常運作,必須配置Apache以允許CGI的執(zhí)行,其方法有多種。

ScriptAlias

ScriptAlias指令使Apache允許執(zhí)行一個特定目錄中的CGI程序。當(dāng)客戶端請求此特定目錄中的資源時,Apache假定其中所有的文件都是CGI程序并試圖運行它。

ScriptAlias指令形如:

ScriptAlias /cgi-bin/ /usr/local/apache2/cgi-bin/

如果Apache被安裝到默認(rèn)位置,默認(rèn)的配置文件httpd.conf中就會有上述配置。ScriptAliasAlias指令非常相似,都是定義了映射到一個特定目錄的URL前綴,兩者一般都用于指定位于DocumentRoot以外的目錄,其不同之處是ScriptAlias又多了一層含義,即URL前綴后面的任何文件都被視為CGI程序。所以,上述例子會指示Apache:任何以/cgi-bin/開頭的資源都將映射到/usr/local/apache2/cgi-bin/目錄中,且視之為CGI程序。

例如,如果有URL為http://www.example.com/cgi-bin/test.pl的請求,Apache會試圖執(zhí)行/usr/local/apache2/cgi-bin/test.pl文件并返回其輸出。當(dāng)然,這個文件必須存在而且可執(zhí)行,并以特定的方法產(chǎn)生輸出,否則Apache返回一個出錯消息。

ScriptAlias目錄以外的CGI

由于安全原因,CGI程序通常被限制在ScriptAlias指定的目錄中,這樣,管理員就可以嚴(yán)格控制誰可以使用CGI程序。但是,如果采取了恰當(dāng)?shù)陌踩胧?,則沒有理由不允許其他目錄中的CGI程序運行。比如,你可能希望用戶在UserDir指定的宿主目錄中存放頁面,而他們有自己的CGI程序,但無權(quán)訪問cgi-bin目錄,這樣,就產(chǎn)生了運行其他目錄中CGI程序的需求。

允許CGI在任意目錄執(zhí)行需要兩個步驟:第一步,必須用AddHandlerSetHandler指令激活cgi-script處理器。第二步,必須在Options指令中啟用ExecCGI選項。

用Options顯式地允許CGI的執(zhí)行

可以在主配置文件中,使用Options指令顯式地允許特定目錄中CGI的執(zhí)行:

<Directory /usr/local/apache2/htdocs/somedir>
Options +ExecCGI
</Directory>

上述指令使Apache允許CGI文件的執(zhí)行。另外,還必須告訴服務(wù)器哪些文件是CGI文件。下面的AddHandler指令告訴服務(wù)器所有帶有cgipl后綴的文件是CGI程序:

AddHandler cgi-script .cgi .pl

.htaccess文件

.htaccess指南示范了怎樣在沒有權(quán)限修改httpd.conf文件的情況下激活CGI程序。

用戶目錄

為了允許用戶目錄中所有以".cgi"結(jié)尾的文件作為CGI程序執(zhí)行,你可以使用以下配置:

<Directory /home/*/public_html>
Options +ExecCGI
AddHandler cgi-script .cgi
</Directory>

如果你想在用戶目錄中指定一個cgi-bin子目錄,其中所有的文件都被當(dāng)作CGI程序,你可以這樣配置:

<Directory /home/*/public_html/cgi-bin>
Options ExecCGI
SetHandler cgi-script
</Directory>

編寫CGI程序

編寫CGI程序和"常規(guī)"程序之間有兩個主要的不同。

首先,在CGI程序的所有輸出前面必須有一個HTTP的MIME類型的頭,對客戶端指明所接收內(nèi)容的類型,大多數(shù)情況下,像這樣:

Content-type: text/html

其次,輸出要求是HTML形式的,或者是瀏覽器可以顯示的其他某種形式。多數(shù)情況下,輸出是HTML形式的,但偶然也會輸出一個gif圖片或者其他非HTML的內(nèi)容。

除了這兩點,編寫CGI程序和編寫其他程序大致相同。

第一個CGI程序

這個CGI程序的例子在瀏覽器中打印一行文字。把下列存為first.pl文件,并放在你的cgi-bin目錄中。

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello, World.";

即使不熟悉Perl語言,你也應(yīng)該能看出它干了什么。第一行,告訴Apache這個文件可以用/usr/bin/perl(或者任何你正在使用的shell)解釋并執(zhí)行。第二行,打印上述要求的內(nèi)容類型說明,并帶有兩個換行,在頭后面留出空行,以示HTTP頭的結(jié)束。第三行,打印文字"Hello, World."。程序到此結(jié)束。

打開你喜歡的瀏覽器并輸入地址:

http://www.example.com/cgi-bin/first.pl

或者是你存放程序的其他位置,就可以在瀏覽器窗口中看到一行:Hello, World. 。雖然并不怎么激動人心,但是一旦這個程序能正常運行,那么就可能運行其他任何程序。

程序還是不能運行!

使用瀏覽器從網(wǎng)絡(luò)訪問CGI程序,可能會發(fā)生四種情況:

CGI程序的輸出
太好了!這說明一切正常。如果輸出正常但是瀏覽器處理出錯,請確認(rèn)你在CGI程序中使用了正確的 Content-Type 。
CGI程序的源代碼或者一個"POST Method Not Allowed"消息
這說明Apache沒有被正確配置以執(zhí)行CGI程序,重新閱讀配置Apache看看遺漏了什么。
一個以"Forbidden"開頭的消息
這說明有權(quán)限問題。參考Apache錯誤日志和下面的文件權(quán)限。
一個"Internal Server Error"消息
查閱Apache錯誤日志,可以找到CGI程序產(chǎn)生的出錯消息"Premature end of script headers"。對此,需要檢查下列各項,以找出不能產(chǎn)生正確HTTP頭的原因。

文件的權(quán)限

記住,服務(wù)器不是以你的用戶身份運行的,在服務(wù)器啟動后,擁有的是一個非特權(quán)用戶的權(quán)限(通常是nobodywww)而需要更大的權(quán)限以允許文件的執(zhí)行。通常,給予nobody足夠的權(quán)限以執(zhí)行文件的方法是,對文件賦予任何人皆可執(zhí)行的權(quán)限:

chmod a+x first.pl

另外,如果需要對其他文件進(jìn)行讀取或?qū)懭?,也必須對這些文件賦予正確的權(quán)限。

路徑信息和環(huán)境變量

當(dāng)你在命令行執(zhí)行一個程序,某些信息會自動傳給shell而無須你操心,比如PATH ,告訴shell你所引用的文件可以在哪兒找到。

但是,在CGI程序通過web服務(wù)器執(zhí)行時,則沒有此PATH ,所以,你在CGI程序中引用的任何程序(如sendmail)都必須指定其完整的路徑,使shell能找到它們以執(zhí)行你的CGI程序。

一種普通的用法是,在CGI程序的第一行中指明解釋器(通常是perl),形如:

#!/usr/bin/perl

必須保證它的確指向解釋器。

另外,如果CGI程序依賴于某些環(huán)境變量,你要確保所需要的變量已經(jīng)正確的由Apache進(jìn)行了傳遞。

程序錯誤

多數(shù)CGI程序失敗的原因在于程序本身有問題,尤其是在已經(jīng)消除上述兩種錯誤而CGI掛起的情況下。在用瀏覽器測試以前,先在命令行中執(zhí)行你的程序,能夠發(fā)現(xiàn)大多數(shù)的問題。比如:

cd /usr/local/apache2/cgi-bin
./first.pl

(不要調(diào)用perl解釋程序,因為shell和Apache會根據(jù)腳本第一行的路徑信息找到解釋器)

你最先看到的輸出內(nèi)容應(yīng)當(dāng)是一組HTTP頭,包括Content-Type和結(jié)尾的空行。如果你看到了別的什么東西,那么當(dāng)你在服務(wù)器上試運行時,Apache會返回 Premature end of script headers 錯誤。參見上面的編寫CGI程序以獲得更多信息。

錯誤日志

錯誤日志是你的朋友。任何錯誤都會在錯誤日志中有所記載,所以你應(yīng)該首先查看它。如果你的網(wǎng)站空間提供者不允許訪問錯誤日志,那么你應(yīng)該考慮換一個空間提供者。學(xué)會閱讀錯誤日志,可以快速找出問題并快速解決。

Suexec

suexec允許CGI程序根據(jù)其所在虛擬主機或用戶宿主目錄的不同而以不同的用戶權(quán)限運行。suexec有極其嚴(yán)格的權(quán)限校驗,任何校驗失敗都會使CGI程序遭遇 Premature end of script headers 錯誤。

為了檢查你是否使用了suexec ,運行 apachectl -V 并檢查SUEXEC_BIN的位置。如果Apache在啟動時發(fā)現(xiàn)suexec二進(jìn)制文件正存在于此,那么suexec將會被激活。

除非你很精通suexec,否則請不要使用它。要禁用它,只要刪除(或重命名)SUEXEC_BIN所指定位置的suexec二進(jìn)制文件并重啟服務(wù)器就可以了。如果你又想啟用它,請首先閱讀suexec文檔以詳細(xì)了解其運行機制,然后運行 suexec -V 命令找到suexec日志文件,并使用該日志文件找到你違反了哪條判斷規(guī)則。

幕后是怎樣操作的?

當(dāng)你的CGI編程逐漸深入,理解幕后的操作(尤其是瀏覽器和服務(wù)器之間是如何通訊的)就變得很有用了。因為雖然成功地寫了一個程序打印"Hello, World",但并沒有實際的用處。

環(huán)境變量

環(huán)境變量是使用計算機時到處都會用到的變量,比如路徑(對實際文件的一個搜索路徑以補全你的輸入)、你的用戶名以及你的終端類型等等。在命令行輸入 env ,可以得到當(dāng)天標(biāo)準(zhǔn)的環(huán)境變量列表。

在CGI處理過程中,服務(wù)器和瀏覽器都會設(shè)置環(huán)境變量,比如瀏覽器類型(Netscape、IE、Lynx)、服務(wù)器類型(Apache、IIS、WebSite)以及將要執(zhí)行的CGI程序名稱等等。

所有這些變量對CGI程序員都有效,但只是客戶端-服務(wù)器通訊的一半內(nèi)容。完整的變量列表參見http://hoohoo.ncsa.uiuc.edu/cgi/env.html

這個簡單的CGI程序列出了所有的環(huán)境變量,Apache發(fā)行版的cgi-bin目錄中還有一個類似的程序。注意,有些變量是必須的,有些則是可選的,所以你可能會看見一些官方列表中沒有的變量。另外,Apache有多種方法可以在默認(rèn)提供的變量之外增加你的專用環(huán)境變量。

#!/usr/bin/perl
print "Content-type: text/html\n\n";
foreach $key (keys %ENV) {
print "$key --> $ENV{$key}<br>";
}

STDIN 和 STDOUT

服務(wù)器和客戶端之間的其他通訊都通過標(biāo)準(zhǔn)輸入設(shè)備(STDIN)和標(biāo)準(zhǔn)輸出設(shè)備(STDOUT)完成。通常,STDIN是指鍵盤或者一個程序所作用的一個文件,STDOUT指控制臺或顯示器。

當(dāng)你POST一個網(wǎng)絡(luò)表格到一個CGI程序時,表格中的數(shù)據(jù)被捆扎為一個特殊形式通過STDIN傳送給CGI程序,這樣,這個程序就可以處理這些數(shù)據(jù),仿佛這些數(shù)據(jù)是來自鍵盤或者一個文件。

這種"特殊形式"很簡單,一個字段名稱及其值,中間用等號(=)連接,多個這樣的字段對用與符號(&)連接。非常規(guī)字符,如空格、"&"號和"="號,被轉(zhuǎn)換為其等值的十六進(jìn)制以免出問題。整個字符串形如:

name=Rich%20Bowen&city=Lexington&state=KY&sidekick=Squirrel%20Monkey

有時,你會發(fā)現(xiàn)URL后面也會帶有這樣的字符串。這種形式會使服務(wù)器以這個字符串的內(nèi)容設(shè)置環(huán)境變量QUERY_STRING ,稱為GET請求。你的HTML表格在FORM標(biāo)簽中設(shè)置METHOD屬性,以指定傳送數(shù)據(jù)的動作使用GETPOST

你的程序必須把這個字符串分解以獲得有用信息。所幸,有庫和模塊可以幫助你處理這些數(shù)據(jù),還有為你的CGI程序達(dá)成其他目的的處理器。

CGI模塊/庫

編寫CGI程序時,你應(yīng)該考慮使用代碼庫或模塊來完成大多數(shù)瑣碎的工作,以減少錯誤并更快地開發(fā)。

如果用Perl語言編寫CGI程序,可用的模塊見CPAN ,最常用的模塊是CGI.pm 。也可以考慮用CGI::Lite ,它實現(xiàn)了一個在多數(shù)程序中所有必須的最小功能集。

如果用C語言編寫CGI程序,則有很多選擇,其中之一是CGIC庫,來自http://www.boutell.com/cgic/

更多信息

網(wǎng)上有大量的CGI資源??梢栽赨senet組comp.infosystems.www.authoring.cgi和別人討論CGI相關(guān)問題。HTML Writers Guild 的郵件列表是一個優(yōu)秀的問題解答資源。更多資源在http://www.hwg.org/lists/hwg-servers/

另外,還可以閱讀CGI規(guī)范,其中有CGI程序操作的所有細(xì)節(jié),原始版本見NCSA ,另有一個更新草案見Common Gateway Interface RFC project

當(dāng)你向一個郵件列表或者新聞組提交CGI相關(guān)問題時,你應(yīng)該確保提供了足夠的信息以更容易地發(fā)現(xiàn)并解決問題,諸如:發(fā)生了什么事、你希望得到什么結(jié)果、結(jié)果與你所期望的有什么出入、你運行的服務(wù)器、CGI程序是用什么語言編寫的、如果可能就提供那個討厭的代碼。

注意,不要把CGI相關(guān)問題提交到Apache bug數(shù)據(jù)庫,除非你堅信發(fā)現(xiàn)的是Apache源代碼中的問題。

Vorheriger Artikel: N?chster Artikel: