Liunx服务器CentOS7.6配置,配合宝塔面板,Nginx,netcore webapi接口访问
Liunx服务器CentOS7.6配置,配合宝塔面板,Nginx,netcore webapi接口访问
1.安装netcore环境
参考文章:https://docs.microsoft.com/zh-cn/dotnet/core/install/linux-centos
安装 .NET 之前,请运行以下命令,将 Microsoft 包签名密钥添加到受信任密钥列表,并添加 Microsoft 包存储库。 打开终端并运行以下命令:
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
.NET Core SDK 使你可以通过 .NET Core 开发应用。 如果安装 .NET Core SDK,则无需安装相应的运行时。 若要安装 .NET Core SDK,请运行以下命令:
sudo yum install dotnet-sdk-3.1
查看是否安装成功:
dotnet --info
以上是安装dotent-sdk 。我安装的是2.1版本。
所以,使用的命令是 :sudo yum install dotnet-sdk-2.1
如果命令安装不成功,可手动安装(百度搜索一下)
安装成功后,直接将netcore的publish内容上传到目录下(记住目录,我的是/www/wwwroot/x1yunApi)
上传成功后,用命令启动该项目(dotnet x1yun.dll),记得这样启动的话,要先通过cd,进入到该目录(/www/wwwroot/x1yunApi),
安装成功后,使用命令查看是否启动成功。
通过 # netsttat -nlp 也可以查看到相应内容
上面的127.0.0.1:5000即是netcore运行的端口与访问。
至此,部署已经完成,可以本地通过curl访问到相应内容(如图红箭头)
我们还需要通过域名来访问,因此需要使用Nginx来进行域名的绑定。
我使用宝塔面板进行liunx管理,因此,可以下载安装到liunx上。
SSH中使用命令:yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
直接安装宝塔面板,等待安装完成。
再进入宝塔面板,启用Nginx插件
通过Nginx插件,进行配置:server {
listen 80;
server_name www.******.com;
rewrite ^/(.*)$ https://www.******.com:443/$1 permanent;
}
server{
#监听443端口
listen 443 ssl ;
#对应的域名
server_name www.****.com;
#ssl证书地址
ssl_certificate /etc/ssl/*******.pem;
#pem文件的路径
ssl_certificate_key /etc/ssl/**********.key;
#key文件的路径
#ssl验证相关配置
ssl_session_timeout 5m; #缓存有效期
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #加密算法
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #安全链接可选的加密协议
ssl_prefer_server_ciphers on; #使用服务器端的首选算法
location / {
proxy_pass http://localhost:5000;
#dotnet运行端口,所以需要反向代理到域名
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
至此,服务安装已经完成。由于我是需要用https来进行访问,因此使用了443。如果不使用则直接写
server {
listen 80;
server_name www.******.com;
location / {
proxy_pass http://localhost:5000;
#dotnet运行端口,所以需要反向代理到域名
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
由于关闭SSH后,将会自动停止dotnet的接口应用,可以使用如下两种方式进行进程保护或自启动。
1,通过命令:nohup dotnet x1yun.dll,
2,通过宝塔面板的进程保存插件:supervisord 管理器。
我使用第二种方式,进行进程守护。比较直观可进行随时停用与查看,并且有日志。
操作过程中碰到的三个坑:
1、我在安装了宝塔面板后,再安装dotnet框架,发现一直运行访问不了。但不确定是不是冲突问题,可能是我操作原因(第一次部署)
2、在使用netcore进行liunx部署时,不需要配置网站,而是直接命令行启动即可。由于之前是在windows上部署IIS的netcore接口,自己首先就去面板上部署网站。其实是走了弯路。是windows部署的操作习惯性思维影响。
3,如果使用nginx来进行域名配置,netcore的开发中,不需要强制使用https来访问,而是通过配置nginx进行即可。所以,代码中的
else
{
app.UseHsts();
}
app.UseHttpsRedirection();
可以去掉。并发布时,确保可以使用http来进行访问。如果使用https来发布,则请求时,需要证书
为了方便,因此我使用了nginx,同时记录下nginx做负载均衡的方式
Nginx 均衡负载的实现 简单提一下 均衡策略在http 里添加一个upstream 在这个里面依次填写 不同的ip以及端口
nginx
1.加权轮询策略nginx计算每个后端服务器的权重,然后自动分配权重最高的后端服务器来处理请求。加权轮询策略 使用 weight=1来给地址添加权重,权重越高,nginx会优先分配
upstream mysvr {
server 127.0.0.1:7878 weight=1;
server 192.168.10.121:3333 weight=2;
}
2.ip_hash策略nginx会记录这个访问的ip地址并且在一段时间中 分配给这个ip一个server。ip_hash 在upstream 的结尾加上 ip_hash; nginx 自动使用ip_hash3.url_hash 等.. 插件形式的均衡策略这里就不提了
可以去掉。并发布时,确保可以使用http来进行访问。如果使用https来发布,则请求时,需要证书
为了方便,因此我使用了nginx,同时记录下nginx做负载均衡的方式
Nginx 均衡负载的实现 简单提一下 均衡策略在http 里添加一个upstream 在这个里面依次填写 不同的ip以及端口
nginx
upstream mysvr {
server http://192.168.10.121:3333;
server http://192.168.10.122:3333;
}
server {
....
location ~*^.+$ {
proxy_pass mysvr; #请求转向mysvr 定义的服务器列表
}
nginx 的默认均衡策略是加权轮询1.加权轮询策略nginx计算每个后端服务器的权重,然后自动分配权重最高的后端服务器来处理请求。加权轮询策略 使用 weight=1来给地址添加权重,权重越高,nginx会优先分配
upstream mysvr {
server 127.0.0.1:7878 weight=1;
server 192.168.10.121:3333 weight=2;
}
2.ip_hash策略nginx会记录这个访问的ip地址并且在一段时间中 分配给这个ip一个server。ip_hash 在upstream 的结尾加上 ip_hash; nginx 自动使用ip_hash3.url_hash 等.. 插件形式的均衡策略这里就不提了
关于nginx负载均衡配置的几个状态参数讲解。
-
down,表示当前的server暂时不参与负载均衡。
-
backup,预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。
-
max_fails,允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。
-
fail_timeout,在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用。
mysvr {
server 127.0.0.1:7878 weight=2 max_fails=2 fail_timeout=2;
server 192.168.10.121:3333 weight=1 max_fails=2 fail_timeout=1;
}
upstream
mysvr
{
server 127.0.0.1:7878;
server 192.168.10.121:3333 backup; #热备
}
ip_hash:nginx会让相同的客户端ip请求相同的服务器。
upstream
mysvr {
server 127.0.0.1:7878;
server 192.168.10.121:3333;
ip_hash;
}