1.nginx是一個高性能的Web服務器和反向代理服務器,也可做爲電子郵件代理服務器。
2.在鏈接高併發的狀況下,nginx是Apache服務不錯的替代品,可以支持高達 50,000 個併發鏈接數的響應。php
1.反向代理是指以代理服務器來接受Internet上的鏈接請求,而後將請求轉發給內部網絡上的服務器,並將從服務器上獲得的結果返回到Internet上請求鏈接的客戶端,此時代理服務器對外表現爲一個反向代理服務器。
2.正向代理是指用戶沒法訪問某網站,可是能夠訪問某代理服務器,而代理服務器能夠訪問該網站。因而用戶經過訪問代理服務器去訪問該網站,代理服務器把響應信息返回給用戶。
3.反向代理中用戶訪問的IP和端口是nginx服務器的,不知道提供服務的底層服務器,底層服務器在內網中,對外公開的是nginx服務器,nginx充當中間層。而正向代理中用戶是知道目標服務器的域名信息的,知只是迫於網絡的限制沒法訪問,如最多見的訪問外網。css
nginx有windows版本和linux版本,通常針對項目需求是在Linux部署nginx服務器。html
windows版本下載一個壓縮包,解壓便可
1.文件路徑必須爲英文,不然啓動不成功。
2.查看端口占用,nginx服務器默認啓動80端口。 cmd中node
- netstat -an 顯示出電腦中全部被打開的端口列表
- netstat -ano 顯示出全部佔用端口的列表
- netstat -ano | findstr "80" 顯示出80端口占用的詳細狀況
- tasklist | findstr "80" 查詢端口具體哪一個應用佔用
Netstat是在內核中訪問網絡鏈接狀態及其相關信息的程序,它能提供TCP鏈接,TCP和UDP監聽,進程內存管理的相關報告。python
- 啓動方式1:雙擊nginx.exe
- 啓動方式2:start nginx
- 關閉方式1: 結束進程(兩個進程)
- 關閉方式2:nginx -s stop
nginx的核心配置文件nginx.conf主要由3個部分組成linux
- 基本配置
#user nobody; #配置worker進程運行用戶
worker_processes 1; #配置工做進程數目,根據硬件調整,一般等於CPU數量或者2倍於CPU數量
#error_log logs/error.log; #配置全局錯誤日誌及類型 [debug|info|notice|warn|error|crit(致命錯誤)]默認error
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid; #配置進程pid文件
複製代碼
- events配置
#配置工做模式和鏈接數
events {
# use epoll; #事件處理模型優化
worker_connections 1024; #配置每一個worker進程鏈接數上限,nginx支持的總鏈接數等於worker_connections*worker_processes
# 個人本雙核四線程,多任務運行弱,CPU主頻2.4GHz,運行緩慢
}
複製代碼
- http配置,基本配置和多個server配置
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日誌及存放路徑,並使用上面定義的main日誌格式
#access_log logs/access.log main;
sendfile on; #開啓高效文件傳輸模式
#tcp_nopush on; #防止網絡阻塞
#keepalive_timeout 0;
keepalive_timeout 65; #長鏈接超時時間,單位是秒
#gzip on; #開啓gzip壓縮輸出
#能夠配置多個server
server {
listen 80; #配置監聽端口
server_name localhost; #配置服務名
#charset koi8-r; #配置字符集(俄羅斯字符集)
#access_log logs/host.access.log main;
#默認的匹配斜槓/的請求,當訪問路徑中有/,會被該localtion匹配到並進行處理
#nginx根目錄 /html/index.html
location / {
root html; #root根目錄,nginx安裝主目錄下的html目錄
index index.html index.htm; #配置首頁文件的名稱
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html; #配置50x錯誤頁面 html/50x.html
#精確匹配
location = /50x.html {
root html;
}
#PHP腳本請求所有轉發道到Apache處理
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
#PHP腳本請求所有轉發道到FastCGI處理
# 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;
#}
# 禁止訪問.htaccess文件-一般是禁止外網訪問的文件
# 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服務,安全的網絡傳輸協議,加密傳輸,端口443
# 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是一個http的web服務器,能夠將服務器上的靜態文件(html、圖片等)經過http協議返回給瀏覽器客戶端;若不配置location,nginx默認查找根目錄html中的index.html文件。nginx
server {
listen 8080;
server_name localhost;
location / {
root wangyi/static; #root= ip+端口
index index.html index.htm;
}
#訪問:localhost:8080,或以下配置
location /static {
root wangyi; #注意分號
index index.html index.htm;
}
#訪問:localhost:8080或localhost:8080/static
.......
}
複製代碼
網站服務器由多臺服務器組成一個集羣對外提供服務,當用戶輸入域名進行訪問的時候,負載均衡負責將用戶請求分發到集羣中的不一樣服務器,從而提升併發處理能力。nginx做爲訪問的統一入口,分發請求,實現負載均衡。 負載均衡實現方式有硬件負載均衡和軟件負載均衡。web
nginx經過在nginx.conf配置文件中配置實現負載均衡 1.首先在http模塊配置windows
upstream network1{
server 127.0.0.1:3000 weight=3; #權重
server 127.0.0.1:5000 weight=1;
}
複製代碼
weight表示權重,用於後端服務器性能不均的狀況,訪問比率約等於權重之比,權重越大,被訪問的概率越大。 upstream是配置nginx與後端服務器負載均衡很是重要的一個模塊,他還能對後端服務器的健康狀態進行檢查,若後端服務器中有一臺發生故障,則前端請求不會轉發到該故障機器。 2.而後在server模塊裏配置
localtion /webname{
proxy_pass http://network1;
}
複製代碼
參數‘http://’是固定的,network1字符串要和upstream後面的字符串相等。代理轉發到network1下,而後去匹配upstream,再去匹配upstream下的server。
node http服務建立好之後,nginx 配置好之後,node做爲代理服務器就能夠訪問node服務了。
upstream network1 {
server 127.0.0.1:3000 weight=3;
server 127.0.0.1:5000 weight=1;
server 127.0.0.1:6000 weight=1;
}
server {
listen 8080;
server_name localhost;
location / {
# 訪問不到服務器,作詳細配置。
#proxy_redirect off;
#proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#proxy_set_header X-Forwarded-Proto $scheme;
#proxy_set_header Host $http_host;
#proxy_set_header X-NginX-Proxy true;
#proxy_set_header Connection "";
#proxy_http_version 1.1;
proxy_pass http://network1;
}
複製代碼
const http = require('http')
const fs = require('fs')
const url = require('url')
http
.createServer((req, res) => {
if(req.url == '/favicon.ico'){
res.writeHead(200);
res.end()
return;
}
res.writeHead(200);
fs.createReadStream(__dirname + '/index.html') #不一樣的頁面內容查看效果
.pipe(res);
})
.listen(5000) #3000、6000。。。
------------------------------------------
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>node</title>
<link rel="stylesheet" href="">
</head>
<body>
<div>第 1 個node服務器</div>
<!-- <div>第 2 個node服務器</div> -->
<!-- <div>第 3 個node服務器</div> -->
</body>
</html>
複製代碼
nginx能夠成功訪問服務器,訪問比大約等於權重之比。
- 1.輪詢(默認)
每一個請求輪流分配到不一樣的後端服務器,若是後端服務器宕機,則自動剔除。具體輪詢策略爲第一次訪問第一個,第二次訪問第二個。。。。。
upstream network1 {
server 127.0.0.1:3000;
server 127.0.0.1:5000;
server 127.0.0.1:6000;
}
複製代碼
- 2.權重
每一個請求按照必定比例分發到不一樣的後端服務器,用於後端服務器性能不均的狀況,訪問比率約等於權重之比,權重越大,被訪問的概率越大。
upstream network1 {
server 127.0.0.1:3000 weight=3;
server 127.0.0.1:5000 weight=1;
server 127.0.0.1:6000 weight=1;
}
複製代碼
- 3.ip_hash
ip_hash也叫ip綁定,每一個請求按照訪問ip的哈希值分配,這樣每一個訪問客戶端會固定訪問一個後端服務器,能夠解決會話session丟失的問題,常見帳號密碼登陸。 哈希函數hash("192.168.0.164")%2 = 0 / 1,ip不變的話訪問的服務器不變。
upstream network1 {
ip_hash;
server 127.0.0.1:3000;
server 127.0.0.1:5000;
server 127.0.0.1:6000;
}
複製代碼
當使用ip_hash之後,會一直訪問3000端口的第一臺服務器。
- 最少鏈接 web請求會被轉發到鏈接數最少的服務器上。
upstream network1 {
least_conn;
server 127.0.0.1:3000;
server 127.0.0.1:5000;
server 127.0.0.1:6000;
}
複製代碼
upstream network1 {
least_conn;
server 127.0.0.1:3000;
server 127.0.0.1:5000 backup; #備份 當全部非backup機器宕機的時候才能請求backup機器。
}
upstream network1 {
least_conn;
server 127.0.0.1:3000;
server 127.0.0.1:5000 down;#當前機器是down狀態,不參與負載均衡。
}
複製代碼
把全部靜態資源的訪問改成訪問nginx,而不是後臺服務器,nginx更擅長於靜態資源的處理,性能更好,效率更高。在實際應用中將靜態資源html,css,js,圖片交給nginx處理。 nginx實現靜態代理,在nginx.conf配置文件中添加靜態資源的location。
1.基於請求資源的後綴
location ~ .*\.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)${
 root/html; #訪問靜態資源的路徑,靜態資源部署在nginx安裝目錄下,跟訪問html/index.html一個道理。
}
複製代碼
2.基於請求資源的存放目錄
location ~ .*/(js|css|img|imgags)${
 root/opt/static
}
複製代碼
linux安裝目錄:/user/local/nginx,在linux做爲nginx部署服務器時,請求linux中存放靜態資源的某個目錄,如/opt/static
nginx的負載均衡和靜態代理結合在一塊兒,實現動靜分離,服務器專一於動態資源,nginx專一於靜態資源。
虛擬主機就是把一臺物理服務器劃分紅多個「虛擬」的服務器,這樣咱們的一臺物理服務器就能夠當作多個服務器來使用,從而能夠配置多個網站。 Nginx下,一個server標籤就是一個虛擬主機,設置多個虛擬主機,配置多個server便可。
根據nginx的不一樣端口便可訪問到基於不一樣端口的服務器。
server {
listen 8080; #9090。。。
server_name localhost;
location / {
proxy_pass http://network1;
}
}
upstream network1 {
server 127.0.0.1:3000;
}
upstream network2 {
server 127.0.0.1:5000;
}
複製代碼
基於域名的虛擬主機訪問時以域名的形式訪問,這就涉及到DNS域名解析的知識,咱們能夠在windows的hosts文件給域名直接指定端口,windows C:\Windows\System32\drivers\etc有個hosts文件,若是在這裏指定了一個域名對應的ip地址,那瀏覽器會首先使用這個ip地址。
server {
listen 8080;
server_name www.maanshan.com
# server_name www.laioyang.com
location / {
proxy_pass http://network1;
#proxy_pass http://network2;
}
}
複製代碼
upstream network1 {
server 127.0.0.1:3000;
}
upstream network2 {
server 127.0.0.1:5000;
}
複製代碼
www.meituan.com
- www.liaoyang.meituan.com
- www.maanshan.meituan.com