lnmp一鍵安裝包中配置swoole域名埠對映
按照官方文件
location / {
proxy_http_version 1.1;
proxy_set_header Connection "keep-alive";
proxy_set_header X-Real-IP $remote_addr;
if (!-e $request_filename) {
proxy_pass http://127.0.0.1:9501;
}
}
新增無效,主要是一鍵安裝包的vhost配置檔案中沒有 找到 location / {
有個折中的辦法,就是在 location ~ \.php { 下配置,把 if 判斷改成如下或者乾脆刪除判斷語句
if (-e $request_filename) {
這樣一來,所有到該域名的請求,不管有沒有index.php,都會變成埠對映,但這樣總感覺太野蠻了
================================================================
後來在配置檔案中發現一句
include /usr/local/nginx/conf/rewrite/thinkphp.conf;
那就編輯這個檔案吧,果然 location / 在這裡,暫時先這樣修改:
location / { # 如果$uri對應的檔案存在,在Nginx返回檔案,否則把請求交給Swoole處理 try_files $uri @swoole; if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=$1 last; break; } } location @swoole { proxy_pass http://127.0.0.1:9501; proxy_http_version 1.1; proxy_set_header Connection "keep-alive"; # Swoole通過$req->header['x-real-ip']拿到該引數 proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; }
這樣最後達到的效果是,url中有index.php的時候正常訪問前臺頁面,無index.php的時候,會跳轉到swoole來處理
但是我並不想讓使用者直接訪問域名就能定位到我的swoole請求頁面,反覆嘗試了好久都達不到效果
================================================================
突然靈光一現,完全可以自己另外定義一個location啊
請求的名字還可以自定義,本例中精確匹配 http
於是所有程式碼都不用動,只需要在配置檔案中新增下邊程式碼即可
location = /http { allow ip白名單1; allow ip白名單2; deny all; proxy_http_version 1.1; proxy_set_header Connection "keep-alive"; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; if (!-e $request_filename) { proxy_pass http://127.0.0.1:9501; } }
這樣連白名單都有了,可以設定只允許 伺服器的反向代理IP 訪問swoole_http_server
TODO:如何防止有人繞過前端頁面直接請求伺服器
================================================================
另外還有一種情況,就是域名後隨便輸入一段字元,會跳出tp的錯誤介面
想讓它跳轉404或者直接返回首頁
將rewrite規則檔案註釋,在域名主配置檔案中新增:
location / {
try_files $uri $uri/ /index.php;
}
這樣無論輸入什麼字元都會跳轉首頁,而index.php入口檔案也不會受影響
該方法有問題,會讓rewrite失效,還是使用配置檔案預設的rewrite規則
如果想跳轉,就在tp中自定義錯誤頁面吧