nginx配置文件
打開 nginx. conf 配置文件,從整體結(jié)構(gòu)可以看出,該配置文件主要由以下幾部分組成,主要的配置都在service和loaction中, 并且對于嵌套塊(如 http、 server、 location)中的指令,執(zhí)行的順序為從外到內(nèi)依次執(zhí)行,內(nèi)層塊中的大部分指令會自動 獲取外層塊指令的值作為默認值
main
events {...}
http {
server {
location {...}
}
}
靜態(tài)資源代理
server{
listen 80
server_name www.myblog.com
location / {
root /opt/html/;
index index.html index.htm;
}
}
www.myblog.com/index.html會到/opt/html下查找index.html靜態(tài)資源
關(guān)鍵字root和alias的區(qū)別
root意思就是根據(jù)root路徑+locationn路徑找到資源;alias意思就是用alias路徑替換對應(yīng)的location路徑內(nèi)容。
#root配置
#IP_Address/images/tmp.jpg = /usr/local/static/images/tmp.jpg
location /images/ {
root /usr/local/static/
}
#alias配置
#IP_Address/images/1.jpg = /usr/local/static/images/tmp.jpg
location /images/ {
alias /usr/local/static/images/
}
當用了正則表達式,proxy_pass后面不能加URL_part
location ~ /test-proxy.html$ {
proxy_pass http://www.myblog.com/index;#這是錯誤操作,不能在接/index
}
端口轉(zhuǎn)發(fā)
upstream default{
server <my ip address>:8888;
}
#Demo2負載均衡池
upstream blog{
server <my ip address>:8888;
}
#默認端口轉(zhuǎn)發(fā)到
server {
listen 80
server_name www.域名.com;
access_log logs/index.log;
error_log logs/index.error;
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://default;
}
}
#Demo2端口轉(zhuǎn)發(fā)
server {
listen 80;
server_name blog.域名.com;
access_log logs/movie.log;
error_log logs/movie.error;
#將所有請求轉(zhuǎn)發(fā)給demo_pool池的應(yīng)用處理
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://blog;
}
}
我的web程序是8888端口,而通過域名訪問默認是80端口,所以需要監(jiān)聽80端口并轉(zhuǎn)發(fā)到我網(wǎng)站程序所在的端口,“server_name blog.域名.com;”中的blog字段需要在域名解析的后臺進行配置
動靜分離
server {
listen 10000;
server_name www.myblog.com;
#攔截后臺請求,myblog.com的請求代理到testblog.com
location / {
proxy_pass http://www.testblog.com;
proxy_set_header X-Real-IP $remote_addr;
}
#攔截靜態(tài)資源
location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|js|css)$ {
root /opt/static;
}
}
反向代理
反向代理(Reverse Proxy)方式是指以代理服務(wù)器外網(wǎng)方式來接受internet上的連接請求,然后將請求轉(zhuǎn)發(fā)給內(nèi)網(wǎng)的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給internet上請求連接的客戶端,此時代理服務(wù)器對外就表現(xiàn)為一個反向代理服務(wù)器
server{
listen 80;
server_name www.myblog.com
location / {
proxy_pass http://192.168.30.80;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
負載均衡
負載均衡其實是基于反向代理向后臺不同服務(wù)器進行資源調(diào)度和分配,因此nginx負載均衡是特殊的反向代理
負載均衡基本配置
upstream backserver {
server 192.168.3.80
server 192.168.3.81
}
- upstream:創(chuàng)建節(jié)點服務(wù)器組的關(guān)鍵字,必須有;
- blog:節(jié)點服務(wù)器組的名字,必須有,可自定義名字;
- server:關(guān)鍵字,后面可加IP或者域名或者IP:端口,端口默認80;
- weight:權(quán)重,數(shù)值越大被分配的請求越多。默認為1
server {
listen 80
server_name www.myblog.com
location / {
proxy_pass http://backserver;
index index.html index.php;
}
}
負載均衡策略配置
1.輪詢(默認)
每個請求按時間順序逐一分配到不同的后端服務(wù)器,如果后端服務(wù)器down掉,能自動剔除,適用于兩臺服務(wù)器配置基本相同
2.權(quán)重
upstream backserver {
server 192.168.3.80 weight=1;
server 192.168.3.81 weight=2;
}
按比例進行分配, 192.168.3.80分配一次, 192.168.3.81分配2次
3.ip_hash(靜態(tài)調(diào)度算法)
每個請求按客戶端IP的hash結(jié)果分配,當新的請求到達,先將客戶端IP通過哈希算法哈希出一個值,在隨后的分配客戶端請求中,客戶IP的哈希值只要相同,就會被分配到同一臺服務(wù)器,可以解決session的問題。
upstream backserver {
ip_hash;
server 192.168.1.207;
server 192.168.1.206;
}
參考文章
https://segmentfault.com/a/1190000018493330
https://my.oschina.net/xinson/blog/3012614
websocket下的nginx配置

在在線安裝接口自動化管理平臺的時候前端一直報ws 404
websocket使用ws的方式連接,如果用ip+端口是可以正常連接的,把ip和端口換成域名后就報404(域名是二級域名)

通過在源碼中添加log發(fā)現(xiàn),ws已經(jīng)關(guān)閉了
server{
listen 80;
server_name yapi.tanjiexia.com;
access_log logs/yapi.log;
error_log logs/yapi.log;
location /{
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://yapi;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection "upgrade";
}
}
添加nginx修改之后ws正常連接,走的onsuccess。。。


Nginx同域名下部署多個單頁面應(yīng)用
轉(zhuǎn)載自:https://segmentfault.com/a/1190000018319774
Nginx常用命令
nginx -t 檢查配置文件是否有語法錯誤
yxl@iZuf6iuhf2ikZ:/etc/nginx/sites-enabled$
yxl@iZuf6iuhf2ikZ:/etc/nginx/sites-enabled$ sudo nginx -t
nginx: [warn] conflicting server name "" on 0.0.0.0:8888, ignored
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
nginx -s stop
nginx -s reload