背景介绍,新进公司之前后台是php开发的外包做的,比较难以满足现在的业务,所以让我写一套系统 满足现在的业务,外包做的项目环境搭建是ubun18.04+mysql+php+nginx(php发布使用端口是80),里面php程序的话有个数据上传接口,Get:url/project/UploadData.php,与外部交互。这个地方就需要做跳转

   1直接在程序里面做转发

   找到php程序发布的目录,找到project目录下的UploadData.php文件顶部

< ?php 
header("Location: https://www.cnblogs.com/axyls/"); 
exit;
?>  

这个方法可以用但是转了好几层,先是用户请求到nginx,然后到php程序,然后到自己写的.net core中,用了一段时间后直接取消了,感觉不太好

 

  2直接Nginx里面做转发

  找到nginx配置文件nginx.conf,在etc/nginx/下

http {
    server {
            server_name 127.0.0.1;
 
            location /project/UploadData.php 
           { proxy_pass https://www.cnblogs.com/axyls;
           } 
      }
  }

  这样就可以转发了,但是如果数据多了请求频繁了就要在nginx里面做限制,要求一个ip一秒访问一次UploadData.php这个接口网页,

limit_req_zone $binary_remote_addr zone=one2:10m   rate=1r/s;

  然后跳转我的网页,但是最后发现.net core如果要区分用户请求ip是无法区分的,因为都是nginx转发到.net core,(nginx应该可以做到转发得到时候用户请求的是什么ip就抓发什么ip)

 3直接正在.net core里面设置接收这个请求

   在 Startup.cs里面添加

app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default", 
pattern: "{controller=Login}/{action=Index}/{id?}");

endpoints.MapControllerRoute(
name: "project", 
pattern: "{controller=project}/{action=UpdateData}.php");
    
});

  然后将程序发布到80端口,在program.cs里面

        public static IHostBuilder CreateHostBuilder(string[] args) =>
                  Host.CreateDefaultBuilder(args)
                      .ConfigureWebHostDefaults(webBuilder =>
                      {
                          webBuilder.UseStartup<Startup>()
          
                        .UseUrls("http://0.0.0.0:80")
                  
                       ;
                      }) 
                  .UseNLog() 
                  .UseServiceProviderFactory(new AutofacServiceProviderFactory());
    }

  卸载nginx,或者关掉nginx,这样接口接收到请求数据

 

posted on 2020-08-01 11:18  啊修  阅读(698)  评论(0编辑  收藏  举报