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