nginx簡介&nginx基本配置和優化
阿新 • • 發佈:2020-08-03
一、nginx簡介
1.nginx的發展
Nginx是俄羅斯人編寫的一款高效能HTTP和反向代理伺服器。Nginx能夠選擇高效的epoll(Linux2.6核心)、kqueue(FreeBSD)、eventport(Solaris 10)作為網路I/O模型,再高連線併發的場景下,Nginx是Apache伺服器非常不錯的替代品,它能夠支援50000個併發連線數的響應,而CPU、記憶體等系統資源消耗卻非常低,執行非常穩定。
2.為什麼選擇Nginx
2.1 它可以高併發連線
官方測試Nginx可以支援5w併發連線,在實際生產環境中可以支援2~4w併發連線數。這得益於Nginx使用了最新的epoll和kqueue網路I/O模型,而Apache則使用的老的select模型。
2.2 記憶體消耗少
2.3 成本低廉
3.Nginx和Apache、Lighttpd的綜合對比
二、Nginx的基本配置和優化
#使用的使用者和組 #user nobody; #指定工作衍生程序數(一般等於CPU的總核數或總核數的兩倍,例如兩個4核CPU,則總核數為8) worker_processes 1; #錯誤日誌存放路徑 #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #指定PID存放路徑 #pid logs/nginx.pid; events { #允許的連線數 worker_connections1024; } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; include https_params.conf; server { listen 8888; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; } location /test { proxy_pass https://www.baidu.com; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Server-IP $server_name; proxy_set_header X-Server-Port $server_port; proxy_set_header X-Forwarded-Proto $scheme; proxy_connect_timeout 30; proxy_send_timeout 30; proxy_read_timeout 300; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #} }
上面是Nginx的nginx.conf配置檔案,可見配置檔案的構成如下:
....
events {
....
}
....
http {
....
server {
....
}
server {
....
}
....
}
1.Nginx虛擬主機配置
1.1 什麼是虛擬主機
其實就是把一臺執行在網際網路上的伺服器劃分成多個“虛擬”的伺服器,並且每一臺虛擬主機都具有獨立的域名和完整的Internet伺服器功能。同一臺伺服器上的不同虛擬主機是各自獨立的,可由客戶自行管理。不過一臺伺服器只可以支援一定數量的虛擬主機,如果超出這個數量,那麼客戶在使用時將會發現效能急速降低。從網站訪問者來看,每一臺虛擬主機和一臺獨立的主機完全一樣。如下是一個虛擬主機的程式碼:
server { listen 8000; server_name somename alias another.alias; location / { root html; index index.html index.htm; } }
1.2 配置基於IP的虛擬主機
Linux、FreeBSD作業系統都允許新增ip別名。IP別名背後的概念很簡單:可以在一塊物理網絡卡上繫結多個ip地址。這樣就可以在單一網絡卡的同一個伺服器上執行多個基於ip的虛擬主機,nginx多ip虛擬主機配置如下:
http{ #第一個虛擬主機 server { listen 192.168.1.1:8000; server_name somename alias another.alias; location / { root html; index index.html index.htm; } } #第二個虛擬主機 server { listen 192.168.1.2:8000; server_name somename alias another.alias; location / { root html; index index.html index.htm; } } }
1.3 配置基於多域名的虛擬主機
基於域名的虛擬主機是最常見的虛擬主機。只需配置你的DNS伺服器,將每個主機名對映到正確的ip地址,然後配置Nginx伺服器,令其識別不同的主機名就可以了。Nginx配置如下:
http{ #第一個虛擬主機 server { listen 8000; server_name www.baidu.com; location / { root html; index index.html index.htm; } } #第二個虛擬主機 server { listen 8000; server_name www.weibo.com; location / { root html; index index.html index.htm; } } }