1. 程式人生 > >lnmp一鍵安裝包中配置swoole域名埠對映

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中自定義錯誤頁面吧