[技術(shù)探索]Nginx配置

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配置

image.png

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


image.png

通過在源碼中添加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。。。


image.png

image.png

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容