1. 程式人生 > >Nginx作為靜態web伺服器詳解

Nginx作為靜態web伺服器詳解

Nginx可以作為靜態web伺服器
Nginx在實際運維中,用到最多的地方是反向代理伺服器,或負載均衡伺服器
  • 回顧httpd的MPM
  • 回顧http的請求方法
  • 回顧http的響應狀態碼
  • 回顧http與URL

Alt text

(二)回顧IO模型

同步I/O:需要考慮其他任務的完成情況,任務是以序列方式完成的
非同步I/O:無需考慮其他任務的完成情況,任務是併發方式完成的
  • 系統呼叫詳解
    簡單的理解:應用程式需要執行特權級指令,就需要向核心程式碼發起系統呼叫,請求核心的程序去完成特權的操作,比如write操作。當核心程序代理應用程式完成了特權操作之後,就執行的結果再返回給呼叫者。這就是一次完整的系統呼叫過程
站在應用程式的角度看待系統呼叫過程:
    同步等待:監聽呼叫點,死等。阻塞
        缺陷:效能不高,單位時間內執行的任務有限
    非同步等待:不會死等,可以做其他的事情。非阻塞
        缺陷:context switch
切換速率頻繁,CPU使用率高
  • 同步阻塞: (呼叫結果返回之前,呼叫者會被掛起,一直等待訊息通知)
  • 同步非阻塞:(呼叫結果返回之前,呼叫者可以繼續後續的任務,當呼叫通知返回的時候,會立即響應)
  • 非同步阻塞:(在等待通知這段時間內,也就是通知發給呼叫者這段時間內,呼叫者不能夠繼續後續的任務)
  • 非同步非阻塞:(在等待通知這段時間內,也就是通知發給呼叫者這段時間內,呼叫者還能夠繼續後續的任務)

  • linux的I/O模型

同步阻塞
同步非阻塞
I/O multiplexing
Signal Driven IO
AIO

Alt text

(三)Nginx(一)

  • Nginx的特性
1:各功能基於模組化設計,擴充套件性好
2:支援平滑重啟,實現應用不下線部署
3:在多併發請求模型下,記憶體消耗低
4:支援事件驅動模型和非同步I/O
5:支援FastCGI協議將動態請求發往後端的動態web伺服器,支援WSGI(Python)等協議
62017-04-12版本已經支援:多型別的SSL certificate、DSO機制
7:master/worker架構模型:一個master主程序,可以生產多個worker子程序
...
  • Nginx應用場景
1:靜態web伺服器
2:http協議的反向代理伺服器
3:郵件協議的反向代理伺服器

Alt text

(三)Nginx 安裝和核心模組介紹

  • Nginx的安裝方法
1:yum安裝
    預設是1.6版本,且在epel源中
2:原始碼包編譯安裝
    原始碼下載:http://nginx.org/en/download.html,下載1.8穩定版本
3:RPM包安裝
    RPM包下載:http://nginx.org/packages/centos/7/x86_64/
  • 編譯時候公網提供編譯選項
./configure \ 
--prefix=/usr/local 
--sbin-path=/usr/sbin/nginx 
--conf-path=/etc/nginx/nginx.conf 
--error-log-path=/var/log/nginx/error.log 
--http-log-path=/var/log/nginx/access.log 
--pid-path=/var/run/nginx.pid 
--lock-path=/var/run/nginx.lock 
--http-client-body-temp-path=/var/cache/nginx/client_temp 
--http-proxy-temp-path=/var/cache/nginx/proxy_temp 
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp 
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp 
--http-scgi-temp-path=/var/cache/nginx/scgi_temp 
--user=nginx 
--group=nginx 
--with-http_ssl_module 
--with-http_realip_module 
--with-http_addition_module 
--with-http_sub_module 
--with-http_dav_module 
--with-http_flv_module 
--with-http_mp4_module 
--with-http_gunzip_module 
--with-http_gzip_static_module 
--with-http_random_index_module 
--with-http_secure_link_module 
--with-http_stub_status_module 
--with-http_auth_request_module 
--with-threads 
--with-stream 
--with-stream_ssl_module 
--with-http_slice_module 
--with-mail 
--with-mail_ssl_module 
--with-file-aio 
--with-http_v2_module 
--with-ipv6
  • 常用的編譯選項(先新增Nginx使用者和Nginx組,且安裝development tools 和 server platform development pcre-devel openssl-devel zlib-devel)
./configure --prefix=/usr/local/nginx1.8 --conf-path=/etc/nginx/nginx.conf --user=nginx --group=nginx --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --with-http_ssl_module --with-http_gzip_static_module --with-debug --with-http_stub_status_module
  • 編譯安裝完成後啟動Nginx、已經Nginx的常用命令講解
(1)(在啟動之前,先將命令新增到環境變數裡面,再做一個軟連線)
ln -sv /usr/local/nginx1.8 /usr/local/nginx
vi /etc/profile.d/nginx.sh 新增
    export PATH=/usr/local/nginx/sbin:$PATH
. /etc/profile.d/nginx.sh
(2)啟動Nginx
    nginx
(3)檢視nginx客戶端程式的幫助
    nginx -h 
  • 編寫Nginx的service指令碼檔案,讓其開機自啟
(1)vi /etc/rc.d/init.d/nginx  新增
#! /bin/bash
# chkconfig: - 85 15
PATH=/usr/local/nginx
DESC="nginx daemon"
NAME=nginx
DAEMON=$PATH/sbin/$NAME
CONFIGFILE=/etc/nginx/nginx.conf
PIDFILE=/var/run/nginx/nginx.pid
SCRIPTNAME=/etc/init.d/$NAME
set -e
[ -x "$DAEMON" ] || exit 0
do_start() {
$DAEMON -c $CONFIGFILE || echo -n "nginx already running"
}
do_stop() {
$DAEMON -s stop || echo -n "nginx not running"
}
do_reload() {
$DAEMON -s reload || echo -n "nginx can't reload"
}
case "$1" in
start)
echo -n "Starting $DESC: $NAME"
do_start
echo "."
;;
stop)
echo -n "Stopping $DESC: $NAME"
do_stop
echo "."
;;
reload|graceful)
echo -n "Reloading $DESC configuration..."
do_reload
echo "."
;;
restart)
echo -n "Restarting $DESC: $NAME"
do_stop
do_start
echo "."
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|reload|restart}" >&2
exit 3
;;
esac
exit 0
(2)chmod +x /etc/rc.d/init.d/nginx 
(3)chkconfig --add nginx
(4)chkconfig --level 35 nginx on
(5)chkconfig --list
  • 模組型別分類
1:核心模組(重點)
2:標準模組 
    標準http模組(重點)
    可選的http模組(重點)
3:第三方組織提供的模組
  • Nginx的配置檔案說明(編譯安裝的時候,將配置檔案路徑設定為/etc/nginx/nginx.conf)
[[email protected] ~]# ll /etc/nginx/
總用量 60
-rw-r--r-- 1 root root 1034 9月  12 02:00 fastcgi.conf
-rw-r--r-- 1 root root 1034 9月  12 02:00 fastcgi.conf.default
-rw-r--r-- 1 root root  964 9月  12 02:00 fastcgi_params
-rw-r--r-- 1 root root  964 9月  12 02:00 fastcgi_params.default
-rw-r--r-- 1 root root 2837 9月  12 02:00 koi-utf
-rw-r--r-- 1 root root 2223 9月  12 02:00 koi-win
-rw-r--r-- 1 root root 3957 9月  12 02:00 mime.types
-rw-r--r-- 1 root root 3957 9月  12 02:00 mime.types.default
-rw-r--r-- 1 root root 2672 9月  13 01:53 nginx.conf  (主配置檔案)
-rw-r--r-- 1 root root 2656 9月  12 02:00 nginx.conf.default
-rw-r--r-- 1 root root  596 9月  12 02:00 scgi_params
-rw-r--r-- 1 root root  596 9月  12 02:00 scgi_params.default
-rw-r--r-- 1 root root  623 9月  12 02:00 uwsgi_params
-rw-r--r-- 1 root root  623 9月  12 02:00 uwsgi_params.default
-rw-r--r-- 1 root root 3610 9月  12 02:00 win-utf
  • 主配置檔案說明(先將註釋部分去掉:sed -ri ‘/^#|[[:space:]]+#/d’ /etc/nginx/nginx.conf)
1)全域性配置段
    1:指明執行worker程序的使用者和組 
     user nginx nginx;
    2:指明pid檔案路徑
    pid /var/run/nginx.pid;
    3:指明worker程序所能夠開啟的最大檔案數(可以省略)
    worker_rlimit_nofile 1024 
    4:worker的程序數,應該為CPU的核心數或核心數減一,如果是雙核CPU,可以給2
    worker_processes 2;
    5:將nginx的worker程序,繫結在不同的CPU上, 如果分別繫結在第一顆和第二顆核心上,可以使用ps axo command,pid,psr 命令檢視CPU的繫結情況
    worker_cpu_affinity 0001 0010;
    6:指定程序的nice值,nice值越小優先順序越高
    worker_priority 0;
    7:指定以何種方式啟動Nginx,預設是以daemon的方式啟動
    daemon on
    8:指定是否使用master/worker模型啟動nginx程序,預設是
    master_process on 
    9:指定錯誤日誌檔案路徑、日誌級別 
    error_log logs/error.log error;
(2event配置段
    1:指定單個worker程序開啟的最大socket連線數,預設為512,但是必須小於worker程序所能夠開啟的最大檔案數
    worker_connections 512;
    2:指明處理併發連線請求時,使用的網路I/O處理方式,無需管理,linux自行判斷
    use method;
    3:指明worker程序是否支援輪詢響響應的新請求
    accept_mutex on;
    4:指明鎖檔案路徑
    lock_file /var/lock/nginx.lock; 
(3)http配置段
    1:指明mime型別,用於資料傳輸
    default_type text/plain;
    或 default_type  application/octet-stream;
    2:指定是否啟用sendfile功能,sendfile功能用於讀寫函式中減少拷貝,也就是linux的0拷貝
    sendfile on;
    3:指定保持連線的超時時長,0表示禁止使用長連線,預設為65秒
    keepalive_timeout  65;
    4:指定長連線上響應客戶端請求的最大數量,預設為
            
           

相關推薦

Nginx作為靜態web伺服器

Nginx可以作為靜態web伺服器 Nginx在實際運維中,用到最多的地方是反向代理伺服器,或負載均衡伺服器 回顧httpd的MPM回顧http的請求方法回顧http的響應狀態碼回顧http與URL (二)回顧IO模型 同步I/O:

Nginx高效能web伺服器》讀書筆記

別人的筆記 Nginx初探 Nginx是一款免費開源的高效能HTTP伺服器及反向代理伺服器,也可以作為郵件伺服器。他的官網是nginx官網以及wiki官網 nginx原始碼下載地址:Nginx版本庫 Nginx伺服器的安裝部署 $sudo apt-get ins

nginx作為靜態資源伺服器和動態代理的用法示例

專案描述 vue專案使用8090埠(提供頁面),java專案使用8080埠(提供ajax介面),nginx監聽80埠。此時,nginx配置如下: #java專案伺服器使用8080埠 upstream server_java { server 127.0.0.1:8080; }

Nginx 作為靜態資源伺服器

Nginx Windows 版本的啟動停止,重新載入配置 啟動 Windows版本下載解壓後有一個nginx.exe可執行檔案,雙擊啟動。 啟動後 瀏覽器訪問http://127.0.0.1 可以看到Nginx的歡迎頁面,說明已經啟動成功。 停止 在命令列中 cd {nginx_home} 到下載

Windows下nginx作為靜態資源伺服器使用

一、Nginx下載與安裝 1、nginx官方下載地址:http://nginx.org/ 2、下載完後將壓縮包解壓即可 3、nginx配置檔案為根目錄下conf\nginx.conf 二、Nginx常用命令說明 cmd進入nginx安裝目錄 tasklist /fi "imagename e

Windows下nginx作為靜態資源伺服器使用小結

起因            最近在公司接個任務,說用nginx做靜態資源伺服器,給客戶端寫個更新程式,把更新包放nginx伺服器上。當然nginx作為一款輕量級的web伺服器/反向代理伺服器/郵件伺服器,對於這簡單的任務毛毛雨啦,在此總結一下nginx的使用,以備遺忘時翻看。

Windows下nginx作為靜態資源伺服器測試

1、修改nginx配置,新增以下配置   #url http://localhost/image/file/22.jpg 對應檔案 E:/image/image/file/22.jpg #url http://localhost/image/33.jpg 對應檔案 E:/

Nginxs學習-1安裝NginxNginx作為靜態網頁伺服器

Nginx作為網站伺服器執行不支援JSP 和 Servlet , 作為靜態網頁伺服器可以執行靜態html檔案。 需要跑JAVAweb專案需要和Tomcat伺服器配合做負載均衡請求轉發實現。 下面是   Windows下 安裝Nginx  作為html伺服器使用 :

windows及centOS7下的Linux下Nginx作為靜態檔案伺服器安裝及配置

windows系統1.下載並安裝nginx,http://nginx.org/en/download.html2.解壓,並修改conf目錄下nginx.conf配置檔案http{#設定mime型別,型別由mime.type檔案定義include    mime.types;d

Nginx Web 服務

並發連接 信息 listen add lock keepalive efi html erl 一、初識Nginx軟件 Nginx是一款非常優秀的web服務軟件,不但可以做web服務軟件,還可以做反向代理負載均衡和前端業務的緩存服務 作為web服務軟件Nginx是一個支持高

VS2015 使用 Web Deploy 釋出網站到 WindowsServer2008 R2伺服器

使用原因:由於開發期間需要將開發出的網站隨時提交到伺服器以便公司高層隨時訪問所以要求將開發出的網站每天釋出到伺服器,頻繁度比較高,因此不能再使用之前的方式(釋出到本地後再拷貝檔案到伺服器),所以想到了使用Web Deploy的方式釋出 簡單描述步驟:    步驟一:

負載均衡軟體和Web應用伺服器

為什麼我們使用軟體負載均衡 海量併發下分散請求,減輕服務壓力,分散式部署,容災,解決單點問題,埠複用節約伺服器資源 硬體負載均衡成本較高,裝置維護較為複雜,穩定性高 nginx haproxy lvs(piranha) php+fastcgi,modjk+tomcat 軟體負責均衡原理 負載

Nginx*(靜態web伺服器)安裝

Nginx 安裝配置 Nginx("engine x")是一款是由俄羅斯的程式設計師Igor Sysoev所開發高效能的 Web和 反向代理 伺服器,也是一個 IMAP/POP3/SMTP 代理伺服器。 在高連線併發的情況下,Nginx是Apache伺服器不錯的

Nginx作為靜態資源web服務_防盜鏈配置

Nginx作為靜態資源web服務_防盜鏈配置 1、新建http_referer.html檔案 (1)touch http_referer.html      (2)編輯http_referer.html檔案     

Nginx作為靜態資源web服務_防盜鏈目的

Nginx作為靜態資源web服務_防盜鏈目的 1、防盜鏈目的     目的:防止資源被盜用。     防止非正常使用者訪問,佔用網站資源,影響網站效能,勢必影響正常使用者訪問。   2、防盜鏈設定思路  &nbs

Nginx作為靜態資源web服務_跨站訪問場景配置

Nginx作為靜態資源web服務_跨站訪問場景配置 跨域訪問場景演示 設施準備:兩臺雲伺服器 or 建立兩臺虛擬伺服器(VMWare、VirtureBox等) (1)騰訊雲伺服器上新增CSRF.html檔案 使用JQuery Ajax請求模擬跨域訪問: CSRF.

Nginx作為靜態資源web服務_跨站訪問

Nginx作為靜態資源web服務_跨站訪問 1、跨域訪問          瀏覽器同時訪問多個域名   2、為什麼瀏覽器禁止跨域訪問?        不

Nginx作為靜態資源web服務_瀏覽器快取場景演示

Nginx作為靜態資源web服務_瀏覽器快取場景演示 1、expires過期時間語法 Nginx在響應頭中新增:Cache-Control、Expires頭 Syntax: expires [modified] time;e

Nginx作為靜態資源web服務_瀏覽器快取

Nginx作為靜態資源web服務_瀏覽器快取 1、瀏覽器快取     HTTP協議定義的快取機制(如:Expire;Cache-control等) 2、瀏覽器無快取場景圖      3、瀏覽器有快取場景圖   &

Nginx作為靜態資源web服務_gzip場景演示

Nginx作為靜態資源web服務_gzip場景演示 1、Nginx壓縮模組 (1)http_gzip_module         應用支援gzip壓縮方式 (2)http_gzip_static_module