nginx的兩種用法:
-
打通前后端項(xiàng)目,前后端分離的項(xiàng)目,通過(guò)nginx建立連接
-
負(fù)載均衡,一臺(tái)機(jī)器請(qǐng)求轉(zhuǎn)發(fā)至多個(gè)服務(wù)器
1. 前后端分離項(xiàng)目,打通前后端項(xiàng)目
前端項(xiàng)目中的配置:
后端項(xiàng)目的ip和端口號(hào)就是正常的
下面看看nginx的配置文件:
將打包后的前端項(xiàng)目放這里:
vue項(xiàng)目打包后會(huì)生成一個(gè)dist文件夾
放在服務(wù)器上:
如果說(shuō)前端的項(xiàng)目有改動(dòng),或者nginx.conf有改動(dòng),則重啟nginx
cd /usr/local/nginx/sbin
./nginx -s reload
nginx.conf
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
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;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
location /prod-api/{
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8080/;
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
}
}
# 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;
# }
#}
}
2. 負(fù)載均衡,一臺(tái)機(jī)器請(qǐng)求轉(zhuǎn)發(fā)至多個(gè)服務(wù)器
![
有些項(xiàng)目,需要負(fù)載均衡,就是真實(shí)網(wǎng)址不想暴露出來(lái),當(dāng)用戶請(qǐng)求nginx服務(wù)器所在的網(wǎng)址時(shí),會(huì)跳轉(zhuǎn)到其他網(wǎng)站
有以下幾種方式,并將配置文件獻(xiàn)上:
- ip_hash
- 輪詢
- 權(quán)重輪詢
- 最少連接
這幾種方式nginx.conf配置文件基本相同,就是upstream里面的東西不一樣
2.1 ip_hash
用途:
這個(gè)方法確保了相同的客戶端的請(qǐng)求一直發(fā)送到相同的服務(wù)器,這樣每個(gè)訪客都固定訪問(wèn)一個(gè)后端服務(wù)器
例如
nginx服務(wù)器ip為10.1.11.10,則圖示中,
張三的電腦不論何時(shí)訪問(wèn)10.1.11.10:9001時(shí),跳轉(zhuǎn)的地址一直是10.1.11.12:8001,
李四的電腦不論何時(shí)訪問(wèn)10.1.11.10:9001時(shí),跳轉(zhuǎn)的地址一直是10.1.11.13:8002
因?yàn)閺埲钏牡碾娔X不是同一臺(tái),IP不一樣導(dǎo)致的
nginx.conf文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-751333.html
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
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;
upstream myhost{
ip_hash;
server 10.1.11.12:8001;
server 10.1.11.13:8002;
}
server {
listen 9001;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://myhost;
}
}
# 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;
# }
#}
}
2.2 輪詢
就是將上一個(gè)配置文件中的ip_hash去掉即可
用途:
該方式是默認(rèn)方式,輪詢適合服務(wù)器配置相當(dāng),無(wú)狀態(tài)且短平快的服務(wù)使用。另外在輪詢中,如果服務(wù)器掛掉,會(huì)自動(dòng)剔除該服務(wù)器
例如:
nginx服務(wù)器ip為10.1.11.10,則這種方式中,
張三的電腦不論何時(shí)訪問(wèn)10.1.11.10:9001時(shí),跳轉(zhuǎn)的地址有時(shí)是10.1.11.12:8001,有時(shí)是10.1.11.13:8002
李四的電腦不論何時(shí)訪問(wèn)10.1.11.10:9001時(shí),跳轉(zhuǎn)的地址有時(shí)是10.1.11.12:8001,有時(shí)是10.1.11.13:8002
因?yàn)樵L問(wèn)跳轉(zhuǎn)是隨機(jī)的
nginx.conf
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
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;
upstream myhost{
server 10.1.11.12:8001;
server 10.1.11.13:8002;
}
server {
listen 9001;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://myhost;
}
}
# 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;
# }
#}
}
2.3 權(quán)重輪詢
用途:
nginx服務(wù)器根據(jù)配置的權(quán)重進(jìn)行請(qǐng)求分發(fā),適合服務(wù)器的硬件配置差別比較大的情況
例如:
nginx服務(wù)器ip為10.1.11.10,則這種方式中,
張三的電腦訪問(wèn)10.1.11.10:9001時(shí),訪問(wèn)了4次,有一次跳轉(zhuǎn)的地址是10.1.11.12:8001,有三次跳轉(zhuǎn)的地址是10.1.11.13:8002
因?yàn)樵L問(wèn)跳轉(zhuǎn)是有權(quán)重的,10.1.11.12:8001的權(quán)重是1,10.1.11.13:8002的權(quán)重是3
nginx.conf
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
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;
upstream myhost{
server 10.1.11.12:8001 weight=1; #該臺(tái)服務(wù)器接受1/4的請(qǐng)求量
server 10.1.11.13:8002 weight=3; #該臺(tái)服務(wù)器接受3/4的請(qǐng)求量
}
server {
listen 9001;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://myhost;
}
}
# 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;
# }
#}
}
2.4 最少連接
用途:
輪詢算法是把請(qǐng)求平均的轉(zhuǎn)發(fā)給各個(gè)后端,使它們的負(fù)載大致相同;但是,有些請(qǐng)求占用的時(shí)間很長(zhǎng),會(huì)導(dǎo)致其所在的后端負(fù)載較高。這種情況下,least_conn這種方式就可以達(dá)到更好的負(fù)載均衡效果,適合請(qǐng)求處理時(shí)間長(zhǎng)短不一造成服務(wù)器過(guò)載的情況
例如:
nginx服務(wù)器ip為10.1.11.10,則這種方式中,
之前有10個(gè)人訪問(wèn)10.1.11.10:9001,有3次訪問(wèn)跳轉(zhuǎn)到了10.1.11.12:8001,
有7次訪問(wèn)跳轉(zhuǎn)到了10.1.11.13:8002
那么張三再次訪問(wèn)時(shí),會(huì)跳轉(zhuǎn)到10.1.11.12:8001
因?yàn)?0.1.11.12:8001連接的次數(shù)最少文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-751333.html
nginx.conf
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
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;
upstream myhost{
least_conn; # 把請(qǐng)求分派給連接數(shù)最少的服務(wù)器
server 10.1.11.12:8001 ;
server 10.1.11.13:8002 ;
}
server {
listen 9001;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://myhost;
}
}
# 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;
# }
#}
}
到了這里,關(guān)于nginx連接前后端分離項(xiàng)目 或 負(fù)載均衡映射多個(gè)服務(wù)器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!