iT邦幫忙

1

關於「Nginx location」參數問題

  • 分享至 

  • xImage

廢話不說,直接上code

upstream test {
 server 192.168.1.1;
}


server {
  listen 80;
  server_name room.scott.com;

location / {
        proxy_pass http://test;
}

location /* {
        return 403;
}

}

主要是想問,如何讓user輸入room.scott.com/斜線後面的網址都回報403?
*字鍵,在這邊不代表全部的意思。

原本目的是想讓
room.scott.com/room1
room.scott.com/room2
room.scott.com
這三個url能通,其餘都回403

正努力看有無相關文件
https://segmentfault.com/a/1190000013267839

版上先進們,是否能協助指引一些方向,不勝感激/images/emoticon/emoticon41.gif


5/12(四) 更新目前處理方向

location = /room  {proxy_pass http://test;}
location = /room2 {proxy_pass http://test;}
location  / {proxy_pass http://test;}

經測試,因結合Jitsi緣故,故location / 不可阻擋

  1. 尋找是否能單獨判定/後面的參數,然後進行阻擋 (加入判斷式)
  2. 由Jitsi Server解決 (之前花時間研究過爬了討論區,沒什麼解法)

解決方案:

server {
  listen 80;
  server_name room.scott.com;


location ~ /(room|room2) {proxy_pass http://172.16.16.1;}

location = / {proxy_pass http://172.16.16.1;}

location ~* /(css/|libs/|lang/|images/|sounds/|http-bind) {proxy_pass http://172.16.16.1;}

location   / { return 403; }

}
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
黃彥儒
iT邦高手 1 級 ‧ 2022-05-11 14:13:07
最佳解答
location = /room1 {...}
location = /room2 {...}
location = / {...}
location   / { return 403; }
看更多先前的回應...收起先前的回應...
froce iT邦大師 1 級 ‧ 2022-05-11 15:22:07 檢舉

那篇有些地方是有問題的。
像是 ^~ 說得很不清楚。

找了些資料,做了些實驗後的總結:

加修飾符(~ ~* ^~ =),優先度都會提高,=最高
只有~開頭的(~ ~*)能用正則表示法,其他都比對字串而已。
越上面的優先度越高。
黃彥儒 iT邦高手 1 級 ‧ 2022-05-11 15:43:27 檢舉

唔,點進去掃了一下還蠻直覺的,但對於新手如何就不知道了
其實最好還是去看官方的
https://docs.nginx.com/nginx/admin-guide/web-server/web-server/

踏雪尋梅 iT邦研究生 5 級 ‧ 2022-05-11 17:12:10 檢舉

阿 ... 我資訊給的不夠齊全,是我思慮不周,拍謝

我原先是自建Jitsi Meet,但沒辦法控制房間數量,因此打算透過nginx,來允許特定URL訪問 (Jitsi只要後面加上房間名稱就能創建)

但如果寫 location / { return 403; }
就會導致這樣的結果,這部分應該是Jitsi Server那邊的問題

但只是想,有沒有辦法解決而已

https://ithelp.ithome.com.tw/upload/images/20220511/20114520l0WdStolrq.png

踏雪尋梅 iT邦研究生 5 級 ‧ 2022-05-11 17:14:36 檢舉
location = /room  {proxy_pass http://test;}
location = /room2 {proxy_pass http://test;}
location  / {proxy_pass http://test;}

寫這樣就正常,但這樣前面兩行基本上就是可有可無的

https://ithelp.ithome.com.tw/upload/images/20220511/201145208VRINN2gFO.png

踏雪尋梅 iT邦研究生 5 級 ‧ 2022-05-12 17:34:08 檢舉

目前改成轉址的方式,可以符合需求,只是需要保留原網址、隱藏新網址

server {
  listen 80;
  server_name room.scott.com;

location   /room {rewrite ^/(.*)$ http://room.scott2.com/room redirect;}

location   / { return 403; }

}


server {
  server_name room.scott2.com;

location / {proxy_pass http://192.168.1.1;}

}
踏雪尋梅 iT邦研究生 5 級 ‧ 2022-05-16 09:53:17 檢舉

黃彥儒哥,能諮詢一下,Nginx,除了透過upstream隱藏真實域名以外
還有其他方式能隱藏域名嗎?

rewrite

是否有隱藏域名的語法呢?

黃彥儒 iT邦高手 1 級 ‧ 2022-05-27 13:12:28 檢舉

踏雪尋梅 不知道你要問什麼耶,建議問問題可以講一下前因後果

踏雪尋梅 iT邦研究生 5 級 ‧ 2022-05-27 16:33:22 檢舉
server {
  listen 80;
  server_name room.scott.com;


location ~ /(room|room2) {proxy_pass http://172.16.16.1;}

location = / {proxy_pass http://172.16.16.1;}

location ~* /(css/|libs/|lang/|images/|sounds/|http-bind) {proxy_pass http://172.16.16.1;}

location   / { return 403; }

}

我這邊解開了!感恩!

1
froce
iT邦大師 1 級 ‧ 2022-05-11 15:50:18

好不容易搞懂,怕自己忘記的範例,這範例應該就看得很清楚了,而且可以直接放進nginx玩,也不用說太多廢話。

# 正則比對
location ~ /(login|room1|room2) {
    set $test1 $1;
    default_type text/html;
    return 200 "<!DOCTYPE html><h2>${test1}</h2>\n";
}

# 排除正則比對,優先度比正則比對高,/login雖然符合上面的正則表示,但因為這條優先度高,會走這條
location ^~ /login {
    default_type text/html;
    return 200 "<!DOCTYPE html><h2>222</h2>\n";
}

# 精確比對,優先度比所有的高
location = / {
    default_type text/html;
    return 200 "<!DOCTYPE html><h2>index</h2>\n";
}

location / {
    return 403;
}
踏雪尋梅 iT邦研究生 5 級 ‧ 2022-05-12 10:33:55 檢舉

WoW , 非常感謝你,確實剛入門Nginx,有時候還是很容易搞混,尤其思緒正混雜的時候!

踏雪尋梅 iT邦研究生 5 級 ‧ 2022-05-16 09:53:46 檢舉

froce

哥,能諮詢一下,Nginx,除了透過upstream隱藏真實域名以外
還有其他方式能隱藏域名嗎?

0

這種的一般我會用 $uri 來處理。再搭配設定變數應用。

也就是將判斷可用跟運行是分開處理的。
我找時間設定一下看看。

踏雪尋梅 iT邦研究生 5 級 ‧ 2022-05-12 10:34:24 檢舉

這是一個很棒的主意,我也正在嘗試,是否能用判斷式,來解決我的問題

踏雪尋梅 iT邦研究生 5 級 ‧ 2022-05-16 09:52:55 檢舉

㊣浩瀚星空㊣

哥,能諮詢一下,Nginx,除了透過upstream隱藏真實域名以外
還有其他方式能隱藏域名嗎?

rewrite

是否有隱藏域名的語法呢?

我要發表回答

立即登入回答