背景介绍,新进公司之前后台是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,这样接口接收到请求数据