<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ### C.1 編譯與安裝[](http://tengine.taobao.org/book/appendix_c.html#c-1 "永久鏈接至標題") [](http:// "點擊提交Issue,反饋你的意見...") ### 環境要求[](http://tengine.taobao.org/book/appendix_c.html#id1 "永久鏈接至標題") 操作系統:目前Nginx各版本在以下操作系統和平臺測試通過: > FreeBSD 3 — 10 / i386; FreeBSD 5 — 10 / amd64; > Linux 2.2 — 3 / i386; Linux 2.6 — 3 / amd64; > Solaris 9 / i386, sun4u; Solaris 10 / i386, amd64, sun4v; > AIX 7.1 / powerpc; > HP-UX 11.31 / ia64; > MacOS X / ppc, i386; > Windows XP, Windows Server 2003 磁盤空間:必須保證至少10M以上的磁盤工具,并且隨著編譯設置及第三方模塊的安裝而有所不同; 編譯器及相關工具: 必須確保操作系統安裝有GCC編譯器;make工具;用戶可通過yum命令安裝編譯器及相關工具:yum -y install gcc gcc-c++ make; 模塊依賴性:Nginx的一些模塊需要第三方庫的支持,如rewrite模塊需要pcre庫,gzip模塊需要zlib模塊,ssl功能你需要openssl庫等。用戶可通過yum命令安裝這些依賴庫:yum -y install pcre pcre-devel zlib zlib-devel openssl openssl-devel; [](http:// "點擊提交Issue,反饋你的意見...") ### 下載[](http://tengine.taobao.org/book/appendix_c.html#id2 "永久鏈接至標題") Nginx是開源軟件,用戶可以訪問?[http://nginx.org/](http://nginx.org/)?網站獲取源碼包或Windows二進制文件下載。其中1.3.x版本為開發版本,1.2.x版本為穩定版本。開發版本分支會較快的獲得新功能和缺陷修復,但同時也可能會遇到新的缺陷。一旦更新穩定下來,就會被加入穩定版本分支。 作為生產環境,通常建議用戶使用穩定版本。 [](http:// "點擊提交Issue,反饋你的意見...") ### Nginx在Windows環境下安裝[](http://tengine.taobao.org/book/appendix_c.html#nginxwindows "永久鏈接至標題") nginx的windows版本使用原生win32 API(非Cygwin模擬層)。當前存在的已知問題:1.采用select作為通知方法,所以不具備很高的性能和擴展性;2.雖然可以啟動若干工作進程運行,實際上只有一個進程在處理請求所有請求;3.一個工作進程只能處理不超過1024個并發連接;4.緩存和其他需要共享內存支持的模塊在windows vista及后續版本的操作系統中無法工作,因為在這些操作系統中,地址空間的布局是隨機的;5.除了XSLT過濾器、圖像過濾器、GeoIP模塊和嵌入Perl語言支持以外,Nginx的Windows版本與Unix版本相比,功能幾乎齊全。 安裝Nginx的Windows版本,建議下載最新的1.3.13開發版本,因為開發分支上包含了所有已知的問題修復,尤其是針對Windows版本的問題修復。解壓下載得到的zip文件,進入nginx-1.3.13目錄,運行nginx。 C盤根目錄下安裝例子 [](http:// "點擊提交Issue,反饋你的意見...") cd c:\ unzip nginx-1.3.13.zip cd nginx-1.3.13 start nginx Nginx的Windows版本的控制命令包含如下: [](http:// "點擊提交Issue,反饋你的意見...") nginx -s stop 快速退出 nginx -s quit 優雅退出 nginx -s reload 更換配置,啟動新的工作進程,優雅的關閉以往的工作進程 nginx -s reopen 重新打開日志文件 [](http:// "點擊提交Issue,反饋你的意見...") ### Nginx在Linux環境下安裝[](http://tengine.taobao.org/book/appendix_c.html#nginxlinux "永久鏈接至標題") Nginx在Linux環境下可以通過編譯源碼的方式安裝,最簡單的安裝命令如下: [](http:// "點擊提交Issue,反饋你的意見...") wget http://nginx.org/download/nginx-1.2.0.tar.gz tar zxvf nginx-1.2.0.tar.gz cd nginx-1.2.0 ./configure make sudo make install 按照以上命令,Nginx將被默認安裝到/usr/local/nginx目錄下。用戶可以通過./configure –help命令查看Nginx可選擇的編譯選項進行自定義安裝配置。 Nginx的configure腳本支持以下選項: [](http:// "點擊提交Issue,反饋你的意見...") --prefix=<PATH> #Nginx安裝路徑。如果沒有指定,默認為 /usr/local/nginx --sbin-path=<PATH> #Nginx可執行文件安裝路徑。只能安裝時指定,如果沒有指定,默認為<prefix>/sbin/nginx --conf-path=<PATH> #在沒有給定-c選項下默認的nginx.conf的路徑。如果沒有指定,默認為<prefix>/conf/nginx.conf --pid-path=<PATH> #在nginx.conf中沒有指定pid指令的情況下,默認的nginx.pid的路徑。如果沒有指定,默認為 <prefix>/logs/nginx.pid --lock-path=<PATH> #nginx.lock文件的路徑 --error-log-path=<PATH> #在nginx.conf中沒有指定error_log指令的情況下,默認的錯誤日志的路徑。如果沒有指定,默認為 <prefix>/logs/error.log --http-log-path=<PATH> #在nginx.conf中沒有指定access_log指令的情況下,默認的訪問日志的路徑。如果沒有指定,默認為 <prefix>/logs/access.log。 --user=<USER> #在nginx.conf中沒有指定user指令的情況下,默認的nginx使用的用戶。如果沒有指定,默認為 nobody --group=<GROUP> #在nginx.conf中沒有指定user指令的情況下,默認的nginx使用的組。如果沒有指定,默認為 nobody --builddir=DIR #指定編譯的目錄 --with-rtsig_module #啟用 rtsig 模塊 --with-select_module(--without-select_module) #允許或不允許開啟SELECT模式,如果configure沒有找到合適的模式,比如,kqueue(sun os)、epoll(linux kenel 2.6+)、rtsig(實時信號)或/dev/poll(一種類似select的模式,底層實現與SELECT基本相同,都是采用輪詢的方法),SELECT模式將是默認安裝模式 --with-poll_module(--without-poll_module) #允許或不允許開啟POLL模式,如果沒有合適的模式,比如:kqueue(sun os)、epoll(liunx kernel 2.6+),則開啟該模式 --with-http_ssl_module #開啟HTTP SSL模塊,使NGINX可以支持HTTPS請求。這個模塊需要已經安裝了OPENSSL,在DEBIAN上是libssl --with-http_realip_module #啟用 ngx_http_realip_module --with-http_addition_module #啟用 ngx_http_addition_module --with-http_sub_module #啟用 ngx_http_sub_module --with-http_dav_module #啟用 ngx_http_dav_module --with-http_flv_module #啟用 ngx_http_flv_module --with-http_stub_status_module #啟用 "server status" 頁 --without-http_charset_module #禁用 ngx_http_charset_module --without-http_gzip_module #禁用 ngx_http_gzip_module. 如果啟用,需要 zlib 。 --without-http_ssi_module #禁用 ngx_http_ssi_module --without-http_userid_module #禁用 ngx_http_userid_module --without-http_access_module #禁用 ngx_http_access_module --without-http_auth_basic_module #禁用 ngx_http_auth_basic_module --without-http_autoindex_module #禁用 ngx_http_autoindex_module --without-http_geo_module #禁用 ngx_http_geo_module --without-http_map_module #禁用 ngx_http_map_module --without-http_referer_module #禁用 ngx_http_referer_module --without-http_rewrite_module #禁用 ngx_http_rewrite_module. 如果啟用需要 PCRE 。 --without-http_proxy_module #禁用 ngx_http_proxy_module --without-http_fastcgi_module #禁用 ngx_http_fastcgi_module --without-http_memcached_module #禁用 ngx_http_memcached_module --without-http_limit_zone_module #禁用 ngx_http_limit_zone_module --without-http_empty_gif_module #禁用 ngx_http_empty_gif_module --without-http_browser_module #禁用 ngx_http_browser_module --without-http_upstream_ip_hash_module #禁用 ngx_http_upstream_ip_hash_module --with-http_perl_module #啟用 ngx_http_perl_module --with-perl_modules_path=PATH #指定 perl 模塊的路徑 --with-perl=PATH #指定 perl 執行文件的路徑 --http-log-path=PATH #指定http默認訪問日志的路徑 --http-client-body-temp-path=PATH #指定http客戶端請求緩存文件存放目錄的路徑 --http-proxy-temp-path=PATH #指定http反向代理緩存文件存放目錄的路徑 --http-fastcgi-temp-path=PATH #指定http FastCGI緩存文件存放目錄的路徑 --without-http #禁用 HTTP server --with-mail #啟用 IMAP4/POP3/SMTP 代理模塊 --with-mail_ssl_module #啟用 ngx_mail_ssl_module --with-cc=PATH #指定 C 編譯器的路徑 --with-cpp=PATH #指定 C 預處理器的路徑 --with-cc-opt=OPTIONS #設置C編譯器的額外選項 --with-ld-opt=OPTIONS #設置鏈接的額外選項 --with-cpu-opt=CPU #為特定的 CPU 編譯,有效的值包括:pentium, pentiumpro, pentium3, pentium4, athlon, opteron, amd64, sparc32, sparc64, ppc64 --without-pcre #禁止 PCRE 庫的使用。同時也會禁止 HTTP rewrite 模塊。在 "location" 配置指令中的正則表達式也需要 PCRE --with-pcre=DIR #指定 PCRE 庫的源代碼的路徑 --with-pcre-opt=OPTIONS #設置PCRE的額外編譯選項 --with-md5=DIR #使用MD5匯編源碼 --with-md5-opt=OPTIONS #設置MD5庫的額外編譯選項 --with-md5-asm #使用MD5匯編源碼 --with-sha1=DIR #設置sha1庫的源代碼路徑 --with-sha1-opt=OPTIONS #設置sha1庫的額外編譯選項 --with-sha1-asm #使用sha1匯編源碼 --with-zlib=DIR #設置zlib庫的源代碼路徑 --with-zlib-opt=OPTIONS #設置zlib庫的額外編譯選項 --with-zlib-asm=CPU #zlib針對CPU的優化,合法的值是: pentium, pentiumpro --with-openssl=DIR #設置OpenSSL庫的源代碼路徑 --with-openssl-opt=OPTIONS #設置OpenSSL庫的額外編譯選項 --with-debug #啟用調試日志 --add-module=PATH #添加一個在指定路徑中能夠找到的第三方模塊 在不同版本間,選項可能會有些許變化,請總是使用./configure –help命令來檢查當前的選項列表。 [](http:// "點擊提交Issue,反饋你的意見...") ### 測試[](http://tengine.taobao.org/book/appendix_c.html#id3 "永久鏈接至標題") 將Nginx conf文件的server block部分的配置如下: [](http:// "點擊提交Issue,反饋你的意見...") server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } # redirect server error pages to the static page /50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } 用戶可以通過訪問“[http://localhost:80/index.html](http://localhost/index.html)”頁面來查看Nginx的歡迎頁面。 [](http:// "點擊提交Issue,反饋你的意見...") ### Nginx在Windows環境下查看nginx進程[](http://tengine.taobao.org/book/appendix_c.html#nginxwindowsnginx "永久鏈接至標題") 用戶還可以通過命令行運行tasklist命令來查看nginx進程: [](http:// "點擊提交Issue,反饋你的意見...") C:\>tasklist /fi "imagename eq nginx.exe" 映像名稱 PID 會話名 會話# 內存使用 ========================= ======== ================ =========== ============ nginx.exe 463024 Console 1 5,036 K nginx.exe 462960 Console 1 5,280 K 如果nginx沒有啟動或沒有得到預期展示頁面,可查看error.log文件以查看失敗原因。如果日志文件不存在,可在Windows事件日志中查看。 [](http:// "點擊提交Issue,反饋你的意見...") ### Nginx在Linux環境下查看nginx進程[](http://tengine.taobao.org/book/appendix_c.html#nginxlinuxnginx "永久鏈接至標題") 用戶可以通過執行ps/top命令來查看nginx進程: [](http:// "點擊提交Issue,反饋你的意見...") ps aux|grep nginx admin 24913 0.0 0.0 58596 1048 ? Ss Feb27 0:00 nginx: master process ./nginx admin 24914 0.0 0.0 72772 5420 ? S Feb27 0:03 nginx: worker process 同上,如果nginx沒有啟動或者沒有得到預期展示頁面,可以查看error.log文件或調試來查看失敗原因。 [](http:// "點擊提交Issue,反饋你的意見...") ### C.2 調試日志[](http://tengine.taobao.org/book/appendix_c.html#c-2 "永久鏈接至標題") 用戶在使用Nginx的過程中,可能會遇到所請求的資源不正確,Nginx Core Dump,段錯誤等異常情況,這時需要有相應的機制來進行調試及問題定位,特別是面對大量的日志信息,合理的調試處理機制對用戶來說是一件非常重要的事情。以下將著重為大家介紹調試日志。 [](http:// "點擊提交Issue,反饋你的意見...") ### 一,開啟調試日志:[](http://tengine.taobao.org/book/appendix_c.html#id4 "永久鏈接至標題") 要開啟調試日志,首先需要在配置Nginx時打開調試功能,然后編譯: [](http:// "點擊提交Issue,反饋你的意見...") ./configure --with-debug ... 然后在配置文件中設置error_log的級別為: [](http:// "點擊提交Issue,反饋你的意見...") error_log /path/to/log debug; Nginx的Windows二進制版本總是將調試日志開啟的,因此只需要設置debug的日志級別即可。 [](http:// "點擊提交Issue,反饋你的意見...") ### 二,日志級別分析:[](http://tengine.taobao.org/book/appendix_c.html#id5 "永久鏈接至標題") 在此,我們通過分析Nginx源碼了解下Nginx將日志分為幾個等級及不同日志等級之間的相互關系: > Ngx_log.h代碼 #define NGX_LOG_STDERR 0 #define NGX_LOG_EMERG 1 #define NGX_LOG_ALERT 2 #define NGX_LOG_CRIT 3 #define NGX_LOG_ERR 4 #define NGX_LOG_WARN 5 #define NGX_LOG_NOTICE 6 #define NGX_LOG_INFO 7 #define NGX_LOG_DEBUG 8#define NGX_LOG_DEBUG_CORE 0x010 #define NGX_LOG_DEBUG_ALLOC 0x020 #define NGX_LOG_DEBUG_MUTEX 0x040 #define NGX_LOG_DEBUG_EVENT 0x080 #define NGX_LOG_DEBUG_HTTP 0x100 #define NGX_LOG_DEBUG_MAIL 0x200 #define NGX_LOG_DEBUG_MYSQL 0x400#define NGX_LOG_DEBUG_FIRST NGX_LOG_DEBUG_CORE #define NGX_LOG_DEBUG_LAST NGX_LOG_DEBUG_MYSQL #define NGX_LOG_DEBUG_CONNECTION 0x80000000 #define NGX_LOG_DEBUG_ALL 0x7ffffff0 其中默認有效的第一級別日志是”stderr”,”emerg”,”alert”,”crit”,”error”,”warn”,”notice”,”info”,”debug”。 而Ngx_log.h內列出的其他debug第二級別日志:”debug_core”,”debug_alloc”,”debug_mutex”,”debug_event”,”debug_http”,”debug_mail”,”debug_mysql”等則需要在配置Nginx時啟動調試日志功能才能使用,并且用戶可以通過修改Ngx_log.h及Ngx_log.c源碼來更新debug第二級別。 我們再通過Ngx_log.c的部分代碼分析下可以如何使用這些日志級別: > Ngx_log.c代碼 [](http:// "點擊提交Issue,反饋你的意見...") char * ngx_log_set_levels(ngx_conf_t *cf, ngx_log_t *log) { ... for (n = 1; n <= NGX_LOG_DEBUG; n++) { if (ngx_strcmp(value[i].data, err_levels[n].data) == 0) { if (log->log_level != 0) { ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "duplicate log level \"%V\"", &value[i]); return NGX_CONF_ERROR; } log->log_level = n; found = 1; break; } } for (n = 0, d = NGX_LOG_DEBUG_FIRST; d <= NGX_LOG_DEBUG_LAST; d <<= 1) { if (ngx_strcmp(value[i].data, debug_levels[n++]) == 0) { if (log->log_level & ~NGX_LOG_DEBUG_ALL) { ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "invalid log level \"%V\"", &value[i]); return NGX_CONF_ERROR; } log->log_level |= d; found = 1; break; } } ... if (log->log_level == NGX_LOG_DEBUG) { log->log_level = NGX_LOG_DEBUG_ALL; } ... } 按照以上代碼邏輯,我們可以得出以下結論: 1. 第一級別日志之間是互斥的,如果配置文件內加入如下配置項: [](http:// "點擊提交Issue,反饋你的意見...") error_log path/logs/error.log warn; error_log path/logs/error.log info; 那么啟動Nginx將報錯如下: [](http:// "點擊提交Issue,反饋你的意見...") [emerg]: duplicate log level "info" in /path/conf/nginx.conf:XX 但是需要注意的是,在配置文件不同block中是允許重新定義錯誤日志的。但是當用戶在重新定義錯誤日志時,如果沒有指定相應的日志級別,那么調試日志將會被屏蔽。下面的例子里,在server層中重新定義的日志就屏蔽了這個虛擬主機的調試日志: [](http:// "點擊提交Issue,反饋你的意見...") error_log /path/to/log debug; http { server { error_log /path/to/log; ... 為了避免這個問題,可以注釋這行重新定義日志的配置,或者也給日志指定debug級別: [](http:// "點擊提交Issue,反饋你的意見...") error_log /path/to/log debug; http { server { error_log /path/to/log debug; ... 2. 第二級別日志是多選的,用戶可以根據項目需要配置多個第二級別日志: [](http:// "點擊提交Issue,反饋你的意見...") error_log logs/error.log debug_mysql; error_log logs/error.log debug_core; 3. 在第一級別日志與第二級別日志組合配置時,僅有在第一級別日志為”debug”時才可以有第二級別的配置,其他第一級別日志的情況下指定第二級別日志將無法啟動Nginx,如: [](http:// "點擊提交Issue,反饋你的意見...") error_log logs/error.log error; error_log logs/error.log debug_core; 啟動Nginx將獲得如下錯誤信息: [](http:// "點擊提交Issue,反饋你的意見...") [emerg]: invalid log level “debug_http” in /path/conf/nginx.conf:XX 當用戶開啟debug級別日志時,會輸出所有debug_開頭的調試信息,因此可以通過上面組合debug_core|debug_http的形式來獲取用戶所需要的調試信息。 [](http:// "點擊提交Issue,反饋你的意見...") ### 三,日志格式設置:[](http://tengine.taobao.org/book/appendix_c.html#id6 "永久鏈接至標題") 用戶在使用Nginx提供web服務的時候,可能會有很多場景需要記錄日志,如打點日志,訪問日志,數據統計日志,性能分析日志等。為了更加方便的對日志進行分析,我們可以通過設置日志格式的方式來要求Nginx按照用戶要求進行日志的展現。 控制nginx日志輸出的指令如下: [](http:// "點擊提交Issue,反饋你的意見...") log_format customLog "$remote_addr^A$remote_user^A$time_local^A$request_method^A$uri^A$args^A$server_protocol" "^A$status^A$body_bytes_sent^A$http_referer" "^A$http_user_agent"; access_log /path/logs/access.log customLog; 上面例子中通過使用特殊字符(^A)來作為日志字段的分隔符,用戶后續可以使用sort和grep之類的工具對特定url做分析,如統計各url請求量倒排取前50個: [](http:// "點擊提交Issue,反饋你的意見...") awk -F^A '{print $5}' /path/logs/access.log | sort | uniq -c | sort -nr | head -50 類似上面的日志定制化設置,可以讓用戶在調試日志的過程中隨心所欲,如魚得水。 詳細的log_format指令和access_log指令,用戶可以訪問Nginx官網的HttpLog模塊[http://wiki.nginx.org/HttpLogModule](http://wiki.nginx.org/HttpLogModule)?。 [](http:// "點擊提交Issue,反饋你的意見...") ### 四,調試日志的幾個注意點:[](http://tengine.taobao.org/book/appendix_c.html#id7 "永久鏈接至標題") 1. 勘誤:在Nginx Wiki里面error log相關部分([http://wiki.nginx.org/NginxHttpMainModule#error_log](http://wiki.nginx.org/NginxHttpMainModule#error_log)?)的介紹中提到 [](http:// "點擊提交Issue,反饋你的意見...") Default values for the error level: in the main section - error in the HTTP section - crit in the server section - crit 但是,我們從源碼上看: [](http:// "點擊提交Issue,反饋你的意見...") static char * ngx_error_log(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) { ... if (cf->args->nelts == 2) { cf->cycle->new_log.log_level = NGX_LOG_ERR; return NGX_CONF_OK; } ... } 當error_log 的日志級別選項為配置時,默認日志級別為error,無上面提及的三個section的區別。故特在此勘誤。 2. 配置error_log off并不能關閉日志記錄——日志信息會被寫入到文件名為off的文件當中。如果要關閉日志記錄,用戶可以做如下配置: [](http:// "點擊提交Issue,反饋你的意見...") error_log /dev/null crit; 3. 如果nginx進程沒有權限將日志信息寫入指定的log地址,那么nginx會在啟動是報錯: [](http:// "點擊提交Issue,反饋你的意見...") [alert]: could not open error log file: open() "/path/log/nginx/error.log" failed (13: Permission denied) 4. 通過debug_connection配置項,用戶可以針對某些地址開啟調試日志: [](http:// "點擊提交Issue,反饋你的意見...") error_log /path/to/log; events { debug_connection 10.232.10.1; debug_connection 10.232.10.0/24; } [](http:// "點擊提交Issue,反饋你的意見...") ### C.3 使用GDB調試[](http://tengine.taobao.org/book/appendix_c.html#c-3-gdb "永久鏈接至標題") [](http:// "點擊提交Issue,反饋你的意見...") ### C.4 功能測試[](http://tengine.taobao.org/book/appendix_c.html#c-4 "永久鏈接至標題") [](http:// "點擊提交Issue,反饋你的意見...") ### C.5 性能/壓力測試[](http://tengine.taobao.org/book/appendix_c.html#c-5 "永久鏈接至標題") [](http:// "點擊提交Issue,反饋你的意見...") ### C.6 常見缺陷分析
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看