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
如果命令安装不成功,可手动安装(百度搜索一下)
安装5.0

# rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm

# yum install dotnet-sdk-5.0

Is this ok [y/d/N]: y

# dotnet --version


安装成功后,直接将netcore的publish内容上传到目录下(记住目录,我的是/www/wwwroot/x1yunApi)

上传成功后,用命令启动该项目(dotnet x1yun.dll),记得这样启动的话,要先通过cd,进入到该目录(/www/wwwroot/x1yunApi),
安装成功后,使用命令查看是否启动成功。



通过  # netstat -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(1.18)插件,进行配置:

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的接口应用,

一个主机nginx绑定多个SSL证书(https)

第一步

检查你的nginx是否支持SNI,检查方式如下

命令:nginx -V
若返回结果中有显示“TLS SNI support enabled”,则表示支持

第二步

创建新的虚拟主机,并配置上第二个SSL证书即可。

 

我本机的服务器用的是nginx1.18gmssl,国密版。支持多个SSL部署。

使用该方式的SSL部署,在配置访问的时候,不能使用http://localhost:5000。必须用http://127.0.0.1:5000访问。

同时,阿里云的端口和宝塔的安全设置中,端口都必须打开。

配置参照如下:

server {

    listen  80 ;

    server_name  api.x1yun.com;

    rewrite ^(.*)$ https://$host$1 permanent;

}

server{

#监听443端口

listen 443 ssl ;

 #对应的域名

server_name api.x1yun.com;

#ssl证书地址

ssl_certificate /etc/ssl/certs/6623730_api.x1yun.com.pem;

#pem文件的路径

ssl_certificate_key  /etc/ssl/certs/6623730_api.x1yun.com.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://127.0.0.1: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;

           }

     }

 

 

 

 


可以使用如下两种方式进行进程保护或自启动。
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

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一起使用。

  •  

upstream
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;
}

 

www.server111.com的配置文件如下

##网站域名 www.server111.com
server {

    listen       80;

    server_name  www.gzxiaoyikeji.com;

    location / {

root /www/wwwroot/gzxiaoyikeji; ##项目路径

index index.html index.htm;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {}

}

server {

    listen       80;

    server_name  www.x1yun.com;

    location / {

root /www/wwwroot/x1yunApi/wwwroot; ##项目路径

index login.html;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {}

}

include /www/server/panel/vhost/nginx/*.conf;

nginx.cnof最尾部的括号内添加如下

include vhost/*.conf;

静态网站的HTTPS部署方式:

server {

    listen       80;

    server_name  www.gzxiaoyikeji.com;

     rewrite ^(.*)$ https://$host$1 permanent;

}

server {

    listen  443 ssl ;

    server_name  www.gzxiaoyikeji.com;

    

  #ssl证书地址

ssl_certificate /etc/ssl/certs/6623739_www.gzxiaoyikeji.com.pem;

#pem文件的路径

ssl_certificate_key  /etc/ssl/certs/6623739_www.gzxiaoyikeji.com.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;  #使用服务器端的首选算法

  ssl_session_cache shared:SSL:1m;

    location / {

root /www/wwwroot/gzxiaoyikeji; ##项目路径

index index.html;

}

error_page 500 502 503 504 /50x.html;

location = /50x.html {}

}

 

配置Nginx的H5跨域问题。。

 

######

############

############## API.xxdmmj.com

####################################

server {

    listen  80 ;

    server_name  api.gzxiaoyikeji.com;

    rewrite ^(.*)$ https://$host$1 permanent;

}

server{

#监听443端口

listen 443 ssl ;

 #对应的域名

server_name api.gzxiaoyikeji.com;

#ssl证书地址

ssl_certificate /etc/ssl/certs/6684308_api.gzxiaoyikeji.com.pem;

#pem文件的路径

ssl_certificate_key  /etc/ssl/certs/6684308_api.gzxiaoyikeji.com.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 / {

add_header 'Access-Control-Allow-Origin' $http_origin;

add_header 'Access-Control-Allow-Credentials' 'true';

add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';

add_header 'Access-Control-Allow-Headers' 'DNT,web-token,app-token,Authorization,Accept,Origin,Keep-Alive,User-Agent,X-Mx-ReqToken,X-Data-Type,X-Auth-Token,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';

add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';

if ($request_method = 'OPTIONS') {

  add_header 'Access-Control-Allow-Origin' $http_origin;

add_header 'Access-Control-Max-Age' 1728000;

add_header 'Content-Type' 'text/plain; charset=utf-8';

add_header 'Content-Length' 0;

return 204;

}

 

 proxy_pass  http://127.0.0.1:5010;

 #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;

           }

     }

重点是红色部分,跨域相关的配置,主要是下面这部分:

add_header 'Access-Control-Allow-Origin' $http_origin;

add_header 'Access-Control-Allow-Credentials' 'true';

add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';

add_header 'Access-Control-Allow-Headers' 'DNT,web-token,app-token,Authorization,Accept,Origin,Keep-Alive,User-Agent,X-Mx-ReqToken,X-Data-Type,X-Auth-Token,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';

add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';

if ($request_method = 'OPTIONS') {

add_header 'Access-Control-Max-Age' 1728000;

add_header 'Content-Type' 'text/plain; charset=utf-8';

add_header 'Content-Length' 0;

return 204;

}

下面简单讲解一下,

1、Access-Control-Allow-Origin,这里使用变量 $http_origin取得当前来源域,大家说用“*”代表允许所有,我实际使用并不成功,原因未知;

 

2、Access-Control-Allow-Credentials,为 true 的时候指请求时可带上Cookie,自己按情况配置吧;

 

3、Access-Control-Allow-Methods,OPTIONS一定要有的,另外一般也就GET和POST,如果你有其它的也可加进去;

 

4、Access-Control-Allow-Headers,这个要注意,里面一定要包含自定义的http头字段(就是说前端请求接口时,如果在http头里加了自定义的字段,这里配置一定要写上相应的字段),从上面可看到我写的比较长,我在网上搜索一些常用的写进去了,里面有“web-token”和“app-token”,这个是我项目里前端请求时设置的,所以我在这里要写上;用了JwtBearer来做安全访问,那应该是Access-Control-Allow-Headers: Authentication

 

5、Access-Control-Expose-Headers,可不设置,看网上大致意思是默认只能获返回头的6个基本字段,要获取其它额外的,先在这设置才能获取它;

 

  • 语句“ if ($request_method = 'OPTIONS') { ”,因为浏览器判断是否允许跨域时会先往后端发一个 options 请求,然后根据返回的结果判断是否允许跨域请求,所以这里单独判断这个请求,然后直接返回;

 

 

 

 

 

CentOS7 安装SVN服务器端

1、安装svn服务:

yum -y install subversion

2、查看安装信息:

1.查询文件安装路径:

whereis svn

2.查询运行文件所在路径:

which svn

3.查看版本等信息:

svnserve --version

4.查看安装详细信息:

rpm -ql subversion

5.查看svn服务器是否已经开启

ps -ef|grep svnserve

 

创建目录及仓库:

1)创建版本库目录(此仅为目录,为后面创建版本库提供存放位置)

 

mkdir /var/svn

2)创建svn版本库

 

svnadmin create /var/svn/xxxx

4、配置svn服务:

1)进入已经创建好的版本库目录下,也就是前文说创建的xxxx,进入conf

 

cd /var/svn/xxxx/conf

authz:负责账号权限的管理,控制账号是否读写权限

 

passwd:负责账号和密码的用户名单管理

 

svnserve.conf:svn服务器配置文件

2)配置svnserve.conf文件

3)配置passwd文件

 

4)配置authz文件

 

5、添加防火墙端口准入:

1、添加防火墙准入端口

firewall-cmd --zone=public --add-port=3690/tcp --permanent

2、重启防火墙

firewall-cmd --reload

6、启动服务:

//这个目录其实就是版本库所在目录

svnserve -d -r /var/svn

 

//重启服务需要先杀死进程,再启动:

killall svnserve

svnserve -d -r /var/svn

 

如果killall没有这个命令

安装killall:

yum -y install psmisc

 

posted on 2024-05-21 10:30  侗家小蚁哥  阅读(174)  评论(0编辑  收藏  举报