Nginx知多少系列之(五)Linux下託管.NET Core項目

目錄

1.前言

2.安裝

3.配置文件詳解

4.工做原理

5.Linux下託管.NET Core項目

6.Linux下.NET Core項目負載均衡

7.Linux下.NET Core項目Nginx+Keepalived高可用(主從模式)

8.Linux下.NET Core項目Nginx+Keepalived高可用(雙主模式)

9.Linux下.NET Core項目LVS+Keepalived+Nginx高可用集羣

10.構建靜態服務器

11.日誌分析

12.優化策略

13.總結

 

在這裏我就不介紹如何在Linux上部署.Net Core以及進程守護監控等內容,若是須要能夠查看以前發佈的文章。《.NET Core項目部署到Linux(Centos7)(六)發佈.NET Core 項目到Linux》、《.NET Core項目部署到Linux(Centos7)(七)啓動和中止.NET Core項目》、《.NET Core項目部署到Linux(Centos7)(八)爲.NET Core項目建立Supervisor進程守護監控html

ASP.NET Core內置了Kestrel服務器,但功能簡單,不是一個全功能的Web服務器,主要用於SelfHost,它旨在使ASP.NET儘量快,但其管理安全性和提供靜態文件的能力有限,正式運行仍是要依賴IIS、Apache、Nginx等功能全面的服務器,爲ASP.NET Core程序提供相似緩存、壓縮請求、SSL終端等高深的特性或功能。這兩種服務器的關係是:Nginx、IIS等做爲Kestrel的反向代理服務器。node

 

1.端口映射配置

 

#編輯nginx.conf
sudo vim  /etc/nginx/nginx.conf

#進入文件後,按「i」或者「a」進入插入模式,插入下面的配置信息

 

進去註釋掉http配置下server的默認配置內容python

 

# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.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 / {
#        }
#
#        error_page 404 /404.html;
#            location = /40x.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#            location = /50x.html {
#        }
#    }

# Settings for a TLS enabled server.
#
#    server {
#        listen       443 ssl http2 default_server;
#        listen       [::]:443 ssl http2 default_server;
#        server_name  _;
#        root         /usr/share/nginx/html;
#
#        ssl_certificate "/etc/pki/nginx/server.crt";
#        ssl_certificate_key "/etc/pki/nginx/private/server.key";
#        ssl_session_cache shared:SSL:1m;
#        ssl_session_timeout  10m;
#        ssl_ciphers HIGH:!aNULL:!MD5;
#        ssl_prefer_server_ciphers on;
#
#        # Load configuration files for the default server block.
#        include /etc/nginx/default.d/*.conf;
#
#        location / {
#        }
#
#        error_page 404 /404.html;
#            location = /40x.html {
#        }
#
#        error_page 500 502 503 504 /50x.html;
#            location = /50x.html {
#        }
#    }

}

 

#按ESC,輸入命令保存配置文件
:wq   (保存編輯操做退出)
:wq!  (保存編輯強制退出)
:w ! sudo tee %

 

註釋完原來的映射以後,咱們須要在/etc/nginx/conf.d文件夾下爲.Net Core項目新建一個DemoNetCore.conf文件,文件配置以下linux

 

#進入conf.d文件夾
cd /etc/nginx/conf.d

#建立配置文件
sudo touch DemoNetCore.conf

#編輯配置文件
sudo vim DemoNetCore.conf

#配置文件信息
server {
    listen       80;
    location / {
    proxy_pass http://localhost:8081;
    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;
    }
}

 

配置好以後重啓Nginx,重啓的時候可能會直接報錯,以下圖nginx

 

#重啓Nginx
sudo systemctl restart nginx

 

  

這個時候咱們先找到Nginx相關進程,而後直接幹掉,而後再啓動vim

 

#查看Nginx進程
ps aux | grep nginx

#殺死相關進程
sudo kill -9 2058
sudo kill -9 2059

#重啓Nginx
sudo systemctl restart nginx

 

 

2.驗證效果

 

  

這裏顯示502 Bad Gateway,緣由是SELinux配置的問題緩存

 

 安全加強型 Linux(Security-Enhanced Linux)簡稱 SELinux,它是一個 Linux 內核模塊,也是 Linux 的一個安全子系統。
SELinux 主要由美國國家安全局開發。2.6 及以上版本的 Linux 內核都已經集成了 SELinux 模塊。
SELinux 的結構及配置很是複雜,並且有大量概念性的東西,要學精難度較大。不少 Linux 系統管理員嫌麻煩都把 SELinux 關閉了。
若是能夠熟練掌握 SELinux 並正確運用,我以爲整個系統基本上能夠到達"堅如盤石"的地步了(請永遠記住沒有絕對的安全)。
掌握 SELinux 的基本概念以及簡單的配置方法是每一個 Linux 系統管理員的必修課。安全

 

因此出現這個問題有兩種解決方案:服務器

 

①、直接關閉SELinuxsession

 

#進入SELinux目錄
cd /etc/selinux

#編輯selinux config配置文件
sudo vim config

#修改配置:SELINUX=disabled,保存退出

 

保存好以後,從enforcing或permissive改成diabled,須要重啓系統以後才能生效。當咱們重啓以後,能夠看到下圖訪問正常了。

 

  

②、將Nginx添加至SELinux的白名單

 

yum -y install policycoreutils-python  
cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx  
semodule -i mynginx.pp 

 

相關文章
相關標籤/搜索