快捷搜索:

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中自定义错误页面吧

经验分享 程序员 微信小程序 职场和发展