部署dotnet到centos并启用nginx

1.安装dotnet sdk

命令如下:

rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
yum install dotnet-sdk-3.1

安装完成后,通过命令:dotnet --version来验证。

2.安装部署dotnet程序

打包时,请注意IP配置,如果使用默认配置,那么只能通过localhost而非IP:端口方式访问,具体解决办法请参照:

https://www.cnblogs.com/huangxincheng/p/9569133.html

本文在appsettings.json文件中添加urls项目:"urls": "http://*:5000"来指定所有IP均可访问,配置文件的调用代码在Program.cs文件中,如下所示:

  public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseConfiguration(new ConfigurationBuilder().SetBasePath(Environment.CurrentDirectory)
                            .AddJsonFile("appsettings.json")
                            .Build()).UseStartup<Startup>();
                });

安装完成后,打开IP:5000端口验证。

3.安装nginx

yum install epel-release
yum install nginx

安装完成后,可以通过命令:

which nginx

来查看nginx的主文件所在目录,如果想查看nginx的配置文件,则可以通过以下命令查看:

nginx -t

nginx配置过程:

打开 /etc/nginx/nginx.conf,修改如下:

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
                proxy_pass http://localhost:5000;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

配置完成后,使用命令启动nginx:/usr/sbin/nginx,发现报502错误:

部署dotnet到centos并启用nginx

解决思路如下:

打开配置文件nginx.conf,找到记录错误的日志文件位置,然后打开错误日志文件,如下:

部署dotnet到centos并启用nginx

可以根据错误日志的展示,然后配置upstreams部分,然后运行/usr/sbin/nginx命令,一切正常。但是——如果用systemctl start nginix.service运行,连接时发现服务器还报以上错误,服务器端错误详情为:

部署dotnet到centos并启用nginx

然后一顿搜索,解决方法为:新建目录

mkdir -p /etc/systemd/system/nginx.service.d

然后新建一个文件:override.conf,内容如下(或者使用命令:printf "[Service]\nExecStartPost=/bin/sleep 0.1\n" > /etc/systemd/system/nginx.service.d/override.conf):

[Service]
ExecStartPost=/bin/sleep 0.1

完成后,运行systemctl daemon-reload使之生效。此时,前端调用服务器,发现还报502错误,打开error.log文件,发现错误如下:

2020/09/25 15:16:17 [crit] 9663#0: *15 connect() to 127.0.0.1:5000 failed (13: Permission denied) while connecting to upstream, client: 192.168.102.1, server: _, request: "GET / HTTP/1.1", 
upstream: "http://127.0.0.1:5000/", host: "192.168.102.128"

然后找到原因,是SeLinux阻止所致,解决办法有:1.关闭SeLinux。2,运行命令增加权限(参考地址:http://www.osheep.cn/827.html):

setsebool -P httpd_can_network_connect 1

之后再次调用,发现一切正常。

nginx.conf最终配置配置为:

    upstream backend {
        server localhost:5000;
    }
    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
                proxy_pass http://localhost:5000;

        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

nginx.service的最终配置为:

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/usr/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

 

注意:如果仅仅修改完配置文件重新运行nginx是无法重新加载的,正确的步骤为:

首先,nginx不用停机,让nginx继续运行。

其次,修改配置文件。

再次,运行命令:/usr/sbin/nginx -s reload来使nginx来重新加载配置文件。

 

通过nginx代理,页面展示如下:

部署dotnet到centos并启用nginx

部署dotnet到centos并启用nginx

上一篇:JS获取浏览器信息及屏幕分辨率


下一篇:css @import 用法示例