CentOS 安装及设定 ASP.NET Core + Nginx Proxy

本篇介绍在 CentOS 环境下,安装及设定 ASP.NET Core RuntimeNginx Proxy
并将 ASP.NET Core 注册成系统服务,便于开机后自动启动,附上 Shell Script 写的快速安装脚本。

环境

  • CentOS 7 Minimal 版
  • ASP.NET Core Runtime 2.2 版

安装脚本

新增一个档案 setup-aspnet-core.sh 内容如下:

#!/bin/bash
main() {
    
    
    sudo yum -y install epel-release
    sudo yum -y update
    install_nginx
    install_dotnet
    sudo firewall-cmd --add-service=http --permanent
    sudo firewall-cmd --add-service=https --permanent
    sudo firewall-cmd --reload
}
install_nginx() {
    
    
    echo "###################################"
    echo "########## Install Nginx ##########"
    echo "###################################"
    sudo yum -y install httpd-tools nginx
    sudo setsebool -P httpd_can_network_connect on
    sudo sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
    sudo setenforce 0
    sudo systemctl enable nginx
    sudo systemctl restart nginx
}
install_dotnet() {
    
    
    echo "###########################################"
    echo "########## Install .NET Core 2.2 ##########"
    echo "###########################################"
    sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
    sudo yum -y install aspnetcore-runtime-2.2
}
main "$@"

透过以下指令执行安装脚本,便会自动安装 ASP.NET Core RuntimeNginx

sudo sh setup-aspnet-core.sh

注册 ASP.NET Core 服务

/etc/systemd/system/<自订名称>.service 新增一个服务,把 ASP.NET Core 的停起都透过系统服务控制。
/etc/systemd/system/my-website.service 内容如下:

[Unit]
# Description=<此服务的摘要说明>
Description=MyWebsite
[Service]
# WorkingDirectory=<ASP.NET Core 专案目录>
WorkingDirectory=/usr/share/my-website
# ExecStart=/bin/dotnet <ASP.NET Core 起始 dll>
ExecStart=/bin/dotnet MyWebsite.dll
# 启动若失败,就重启到成功为止
Restart=always
# 重启的间隔秒数
RestartSec=10
# 设定环境变数,注入给 ASP.NET Core 用
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
[Install]
WantedBy=multi-user.target

注意! dotnet CLI 的路径可能不一样,有可能如上例在 /bin/dotnet 也有可能在 /usr/bin/dotnet
建议先用指令 which dotnet 查看 dotnet CLI 的路径。
服务相关指令:

# 开启,开机自动启动服务
systemctl enable my-website.service
# 关闭,开机自动启动服务
systemctl disable my-website.service
# 启动服务
systemctl start my-website.service
# 重启服务
systemctl restart my-website.service
# 停止服务
systemctl stop my-website.service
# 查看服务状态
systemctl status my-website.service

执行启动指令后,再执行查看服务状态确认是否执行成功。

设定 Nginx Proxy

新增档案 /etc/nginx/conf.d/default_proxy_settings,以便其他设定重複使用:

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;

ASP.NET Core Proxy 设定 /etc/nginx/conf.d/my-website.conf

upstream portal {
    
    
    # localhost:5000 改成 ASP.NET Core 所监听的 Port
    server localhost:5000;
}
server {
    
    
    # 只要是透过这些 Domain 连 HTTP 80 Port,都会转送封包到 ASP.NET Core
    listen 80;
    # 可透过空白区分,绑定多个 Domain
    server_name demo.johnwu.cc example.johnwu.cc;
    location / {
    
    
        proxy_pass http://portal/;
        include /etc/nginx/conf.d/default_proxy_settings;
    }
}
# 用 HTTPS 必须要有 SSL 凭证,如果没有要绑定 SSL 可以把下面整段移除
server {
    
    
    # 只要是透过这些 Domain 连 HTTPS 443 Port,都会转送封包到 ASP.NET Core
    listen 443 ssl;
    server_name demo.johnwu.cc;
    ssl_certificate /etc/nginx/ssl/demo.johnwu.cc_bundle.crt;
    ssl_certificate_key /etc/nginx/ssl/demo.johnwu.cc.key;
    location / {
    
    
        proxy_pass http://portal/;
        include /etc/nginx/conf.d/nginx_proxy_conf;
    }
}

修改完成后,执行以下指令检查及套用:

# 检查 Nginx 的设定是否有误
nginx -t
# 若没有错误,即可套用
nginx -s reload

套用以上设定后,架构如下图:
在这里插入图片描述

おすすめ

転載: blog.csdn.net/WuLex/article/details/120278944