间接部署 - 在 Linux 上使用 Nginx 托管 ASP.NET Core 网站

注意:对于 Ubuntu 14.04,建议使用 supervisord 监控 Kestrel 进程作为解决方案。对于 Ubuntu 14.04 的介绍,可以该话题的之前版本。本指南包含以下内容:使用反向代理服务器放置一个现存的 ASP.NET Core 应用程...

注意:

对于 Ubuntu 14.04,建议使用 supervisord 监控 Kestrel 进程作为解决方案。对于 Ubuntu 14.04 的介绍,可以该话题的之前版本。

本指南包含以下内容:

使用反向代理服务器放置一个现存的 ASP.NET Core 应用程序
设置反向代理服务器将请求转发到 Kestrel web 服务器
保证 web 应用程序在启动时作为守护进程(daemon)运行
配置一个进程管理工具帮助 web 应用程序重新启动
先决条件

  1. 使用带有 sudo 权限的标准用户账号访问 Ubuntu 16.04 服务器

  2. 在服务上安装 .NET Core 运行时。

    a. 访问 Download .NET Core page

    b. 选择一个最新非预览版的 .NET Core 版本

    c. 下载表格中 Run apps - Runtime 最新非预览版本

    d. 选择 Linux Package manager instructions 链接,按照你的版本的 Ubuntu 的说明进行操作

  3. 一个现存的 ASP.NET Core 应用程序

之后的任何时候,在升级完 shared framework 后,需要重新启动服务器托管的 ASP.NET Core 应用程序。

发布和复制应用程序
配置应用程序为框架独立的部署。

如果应用程序在本地运行,并且没有配置安全连接(HTTPS),可以安装下面任意一种途径解决:

配置应用程序处理安全的本地连接。更多信息请查看 HTTPS configuration。
从文件 Properties/launchSettings.json 中的属性 applicationUrl 中移除 https://localhost:5001(如果存在的话)
在开发环境中运行 dotnet publish 打包应用程序到一个可以运行在服务器上的目录 (例如,bin/Release/{TARGET FRAMEWORK MONIKER}/publish,占位符 {TARGET FRAMEWORK MONIKER} 是目标框架名称) 中:

dotnet publish --configuration Release
如果你不想在服务器上维护 .NET Core 运行时,应用程序也可以被发布为自包含部署(self-contained deployment)。

使用组织工作流中的工具(例如,SCP,SFTP)复制 ASP.NET Core 应用程序到服务器。通常把 web 应用程序放到 var 目录(例如:var/www/helloapp)。

注意

在生产部署环境中,一个持续集成的工作流完成发布和复制资源到服务器上。

测试服务器:

  1. 从命令行运行应用程序:dotnet <app_assembly>.dll

  2. 在浏览器中,导航到 http://: 验证应用程序正常运行

配置反向代理服务器
反向代理通常用来设置动态 web 应用程序服务。一个反向代理终结 HTTP 请求并转发给 ASP.NET Core 应用程序。

使用反向代理服务
Kestrel 从 ASP.NET Core 服务动态内容是强大的,然而,web 服务能力并没有像 IIS,Apache,或者 Nginx 有很多特性。一个反向代理服务器可以从 HTTP 服务器分担一些工作,例如服务静态内容,缓存请求,压缩请求和 HTTPS 终结。反向代理服务器可能部署在专用机器上,也可能和 HTTP 服务器部署在同一台机器上。

出于本指南的目的,一个单独的 Nginx 实例被使用。它和 HTTP 服务运行在同一台服务器上。根据需求,不同的设置会被选择。

因为请求都被反向代理转发,使用 Microsoft.AspNetCore.HttpOverrides 包中的中间件 Forwarded Headers Middleware。这个中间件使用 X-Forwarded-Proto header 更新了 Request.Scheme,所以重定向 URIs和其它安全策略工作正确。

Forwarded Headers Middleware 应该在其它中间件之前运行。这个顺序保证了依赖 forwarded headers 信息的中间件可以在处理过程中使用 header 的值。在 diagnostics 和 错误处理中间件之后运行 Forwarded Headers Middleware,查看 Forwarded Headers Middleware order。

在调用其它中间件之前,在 Startup.Configure 的顶部调用 UseForwardedHeaders。配置中间件转发 X-Forwarded-For 和 X-Forwarded-Proto headers:

复制代码
using Microsoft.AspNetCore.HttpOverrides;

app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
});

app.UseAuthentication();
复制代码
如果没有中间件没有指定 ForwardedHeadersOptions,默认转发的 headers 是 None。

代理运行在回路地址 (127.0.0.0/8, [::]),包含标准本地地址 (127.0.01),默认是被信任的。如果其它的代理或者组织内的网络处理网络和 web 服务器之间的请求,可以使用 ForwardedHeadersOptions 把它们添加到 KnownProxies 或者 KnownNetworks 列表中。下面的实例在 Startup.ConfigureServices 中添加了一个 IP 地址为 10.0.0.100 可信任的代理到 Forwarded Header Middleware KnownProxies 中。

复制代码
using System.Net;

services.Configure(options =>
{
options.KnownProxies.Add(IPAddress.Parse(“10.0.0.100”));
});
复制代码
更多信息查看 Configure ASP.NET Core to work with proxy servers and load balancers。

安装 Nginx
使用 apt-get 安装 Nginx。安装器创建一个 systemd 初始化脚本启动 Nginx 作为守护进程。按照下面 Ubuntu 安装 Nginx 说明操作:Official Debian/Ubuntu packages。

注意:

如果要求可选的 Nginx 模块,可能需要从源码编译 Nginx。

由于 Nginx 是第一次安装,运行下面的命令显式启动:

sudo service nginx start
通过浏览器显示 Nginx 默认加载页验证 Nginx 是否正常。加载的页面 http://<server_IP_address>/index.nginx-debian.html 是可以访问的。

配置 Nginx
为了配置 Nginx 作为一个反向代理转发 HTTP 请求到你的 ASP.NET Core 应用程序,需要修改 /etc/nginx/sites-available/default。使用文本编辑器打开它,使用下面的内容替换:

复制代码
server {
listen 80;
server_name example.com *.example.com;
location / {
proxy_pass http://localhost:5000;
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;
}
}
复制代码
如果应用程序是 SingalR 或者 Blazor Server app,查看 ASP.NET Core SignalR production hosting and scaling 和 Host and deploy ASP.NET Core Blazor Serve。

如果没有 server_name 匹配,Nginx使用默认服务。如果没有定义默认的服务,配置文件中的第一个服务作为默认服务。作为最佳实践,在配置文件中添加一个返回 444 状态码的默认服务。一个默认的配置示例如下:

server {
listen 80 default_server;
# listen [::]:80 default_server deferred;
return 444;
}
前面的配置文件和默认服务,Nginx 接受端口 80 上主机头为 example.com 或者 *.example.com 的流量。不匹配这些主机的请求将不会被转发到 Kestrel。Nginx 转发匹配的请求到 Kestrel 的 http://localhost:5000。更多信息查看 How nginx processes a request。更改 Kestrel 的 IP/端口。查看 Kestrel: Endpoint configuration。

注意:

没有合适的指定 server_name 指令会暴露你的应用程序的安全弱点。子域通配符绑定(例如,*.example.com)并不会造成安全问题,如果你控制了全部的父域(而不是 *.com,这个存在隐患)。更多信息查看rfc7230 section-5.4.。

Nginx 配置建立后,运行 sudo nginx -t 验证配置文件是否有语法错误。如果配置文件测试成功,可以运行 sudo nginx -s reload 强制 Nginx 使用修改后的配置。

直接在服务器上运行应用程序:

  1. 导航到应用程序目录

  2. 运行应用程序:dotnet <app_assembly.dll>,app_assembly.dll 是应用程序程序集的文件名称。

如果应用程序在服务器上运行成功,但是通过网络访问失败,可以检查服务器的防火墙确认80端口已经打开。如果使用的是 Azure Ubuntu VM,添加一个网络安全组(NSG)规则确保80端口入站流量。不需要使能80端口出站规则,因为出站流量在入站规则使能的视情况会自动保证使能。

完成应用程序的测试后,Ctrl + C 关闭应用程序。

监视应用程序
服务器被设置为转发指向 http://:80 的请求到运行在 Kestrel 地址为 http://127.0.0.1:5000 的 ASP.NET Core 应用程序上。然而,Nginx 没有被设置为管理 Kestrel 进程。systemd 可以被用来创建一个服务文件去启动和监视背后的 web 应用程序。systemd 是一个初始化系统,提供了很多强大的特性去启动,停止和管理进程。

创建一个服务文件
创建一个服务定义文件:

sudo nano /etc/systemd/system/kestrel-helloapp.service
下面是一个应用程序服务文件的示例:

复制代码
[Unit]
Description=Example .NET Web API App running on Ubuntu

[Service]
WorkingDirectory=/var/www/helloapp
ExecStart=/usr/bin/dotnet /var/www/helloapp/helloapp.dll
Restart=always

Restart service after 10 seconds if the dotnet service crashes:

RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-example
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target
复制代码
前面的这个例子中,管理服务的用户通过 User 选项指定。用户 (www-data)必须存在并且拥有应用程序文件的合适的权限。

使用 TimeoutStopSec 配置在应用程序关闭后收到初始中断信号等待的时长。如果应用程序这时没有关闭,SIGKILL 可以用来结束应用程序。可以提供不带单位的秒(例如,150),时间范围(例如,2min 30s),或者 infinity 禁用超时。TimeoutStopSed 默认值是 DefaultTimeoutStopSec 的值,存在于配置文件 (systemd-system.conf,system.conf.d,systemd-user.conf,user.conf.d)。大部分发行版的默认超时时间是 90 秒。

The default value is 90 seconds for most distributions.

TimeoutStopSec=90
Linux 文件系统区分大小写。Production 被设置为 ASPNETCORE_ENVIRONMENT 会使得搜索配置文件 appsetting.Production.json,而不是appsetting.production.json。

某些值(例如, SQL 连接字符串)必须转义才能被配置提供器去读取环境变量。使用下面的命令生成一个在配置文件中使用的合适的转义值:

systemd-escape “”
环境变量名称不支持冒号(:)分隔符。使用双下划线(__)代替冒号。Environment Variables configuration provider 在环境变量被读入配置的时候会转换双下划线为冒号。在下面的示例中,连接字符串键值 ConnectionStrings:DefaultConnection 在服务定义文件中被设置为: ConnectionStrings__DefaultConnection:

Environment=ConnectionStrings__DefaultConnection={Connection String}
保存文件并且使能服务:

sudo systemctl enable kestrel-helloapp.service
启动服务,验证运行:

复制代码
sudo systemctl start kestrel-helloapp.service
sudo systemctl status kestrel-helloapp.service

? kestrel-helloapp.service - Example .NET Web API App running on Ubuntu
Loaded: loaded (/etc/systemd/system/kestrel-helloapp.service; enabled)
Active: active (running) since Thu 2016-10-18 04:09:35 NZDT; 35s ago
Main PID: 9021 (dotnet)
CGroup: /system.slice/kestrel-helloapp.service
└─9021 /usr/local/bin/dotnet /var/www/helloapp/helloapp.dll
复制代码
使用反向代理配置,Kestrel 通过 systemd 管理,web 应用程序已经完全配置好,可以在本机的浏览器中访问 http://localhost。也可以通过远程主机访问,除非是有防火墙的阻塞。检查返回头部,Server 头部显示的是 ASP.NET Core 应用程序托管在 Kestrel 上。

复制代码
HTTP/1.1 200 OK
Date: Tue, 11 Oct 2016 16:22:23 GMT
Server: Kestrel
Keep-Alive: timeout=5, max=98
Connection: Keep-Alive
Transfer-Encoding: chunked
复制代码
浏览日志
由于 web 应用程序使用的 Kestrel 通过 systemd 管理,所有的事件和处理过程都被记录到中心日志中。然而,这个日志包含所有 systemd 管理的服务和进程的所有条目的日志。要查看 kestrel-ledinpro.service 的条目,使用下面的命令:

sudo journalctl -fu kestrel-helloapp.service
更进一步的筛选,时间选项,例如 --since today,until 1 hour ago,或者这些的结合可以减少返回条目的数量:

sudo journalctl -fu kestrel-helloapp.service --since “2016-10-18” --until “2016-10-18 04:00”
数据保护
ASP.NET Core Data Protection stack 被多个 ASP.NET Core 中间件使用,包含认证中间件(例如,cookie 中间件)和跨站请求伪造(CSRF)保护。即使数据保护 APIs 不被用户代码调用,数据保护也应该创建一个持久加密的键值存储配置。如果数据保护没有配置,在内存中的键值在应用程序重启的时候就会被丢弃。

如果 key ring 存储在内存中,当应用程序重启的时候就会:

所有基于 cooked 的认证 tokens 都会失效
用户在他们下一次请求的时候会被要求再次登录
任何使用 key ring 的数据保护不再能被解密。这可能包含 CSRF tokens 和 ASP.NET Core MVC TempData cookies。
为了配置数据保护持久化和加密 key ring,请查看:

Key storage providers in ASP.NET Core
Key encryption at rest in Windows and Azure using ASP.NET Core
长请求头部区域
代理服务器默认设置根据平台请求头部区域限制通常是 4K 或者 8K 大小。应用程序可能要求比默认大小更长的请求头部(例如,使用 Azure Active Directory 的应用程序)。如果更长的请求头部要求,代理服务器的默认设置就需要调整。应用的数值根据情况而定。更多信息,请查看服务器文档:

proxy_buffer_size
proxy_buffers
proxy_busy_buffers_size
large_client_header_buffers
注意:

除非有必要,否则不要增加代理 buffers 的大小。增加这些值增大了 buffer 溢出的风险和 被恶意用户的拒绝服务 Denial of Service(Dos) 攻击。

保护应用程序
使能 AppArmor
Linux Security Modules(LSM) 是一个框架,自 Linux 2.6 版本依赖就是 Linux 内核的一部分。LSM 支持安全模块的不同实现。AppArmor 实现了 Mandatory Access Control 系统的一种 LSM,它允许限制程序访问有限的资源集合。确保 AppArmor 使能是合适的配置。

配置防火墙
关闭所有用不到的端口。Uncomplicated firewall (ufw) 通过提供了 CLI 配置防火墙为 iptable 提供了一个前端。

警告:

如果配置不正确,防火墙将会阻止访问整个系统。错误的指定 SSH 端口将会将你锁定在系统外,如果你使用 SSH 去连接它。默认端口是 22。更多信息请查看 introduction to ufw 和 manual。

安装 ufw,在需要的端口上配置允许流量:

复制代码
sudo apt-get install ufw

sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

sudo ufw enable
复制代码
保护 Nginx
修改 Nginx 返回名称
编辑 src/http/ngx_http_header_filter_module.c:

static char ngx_http_server_string[] = “Server: Web Server” CRLF;
static char ngx_http_server_full_string[] = “Server: Web Server” CRLF;
配置选项
使用更多要求的模块配置服务。考虑使用 web 应用程序防火墙加固应用程序,例如 ModSecurity。

HTTPS 配置
配置应用程序安全 (HTTPS) 的本地连接
dotnet run 命令使用应用程序的 Properties/launchSettings.json 文件,这个文件配置应用程序在由 applicationUrl 属性提供的 URLs 上面监听。例如,https://localhost;http://localhost:5000。

配置应用程序在开发中 dotnet run 命令或者在开发环境中(F5 or Ctrl + F5 在 Visual Studio Code) 中使用一个证书,可以使用以下途径之一:

Replace the default certificate from configuration (推荐的)
KestrelServerOptions.ConfigureHttpsDefaults
配置反向代理安全(HTTPS)的客户端连接
通过指定一个受信任的证书颁发机构的有效证书,配置服务在 443 端口上监听 HTTPS 流量
利用 /etc/nginx/nginx.conf 文件中的一些实践描述加强安全。例子包含了选择一个强加密和重定向HTTP上所有的流量到 HTTPS。
注意

对于开发环境,我们建议使用临时重定向(302)而不是永久重定向(301)。链接缓存可能在开发环境中导致不稳定的行为。

添加一个 HTTP Strict-Transport-Security(HSTS)头部保证客户端随后的所有请求都使用 HTTPS。
更多关于 HSTS 的指南,请查看 Enforce HTTPS in ASP.NET Core
如果在以后不使用 HTTPS 了,可以使用下面其中之一的方法:

  1. 不要添加 HSTS 头部
  2. 选择一个更短的 max-age 值
    添加 /etc/nginx/proxy.conf 配置文件:

复制代码
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffers 32 4k;
复制代码
使用下面的内容替换 /etc/nginx/nginx.conf 配置文件的内容。下面的示例在一个配置文件中包含 http 和 server 部分:

复制代码
http {
include /etc/nginx/proxy.conf;
limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;
server_tokens off;

sendfile on;
keepalive_timeout   29; # Adjust to the lowest possible value that makes sense for your use case.
client_body_timeout 10; client_header_timeout 10; send_timeout 10;

upstream helloapp{
    server localhost:5000;
}

server {
    listen     80;
    return     301 https://$host$request_uri;
}

server {
    listen                    443 ssl;
    server_name               example.com *.example.com;
    ssl_certificate           /etc/ssl/certs/testCert.crt;
    ssl_certificate_key       /etc/ssl/certs/testCert.key;
    ssl_protocols             TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers               "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
    ssl_ecdh_curve            secp384r1;
    ssl_session_cache         shared:SSL:10m;
    ssl_session_tickets       off;
    ssl_stapling              on; #ensure your cert is capable
    ssl_stapling_verify       on; #ensure your cert is capable

    add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;

    #Redirects all traffic
    location / {
        proxy_pass http://helloapp;
        limit_req  zone=one burst=10 nodelay;
    }
}

}
复制代码
注意:

Blazor WebAssembly 应用程序要求更大的 burst 参数以适应应用程序更大数量的请求。更多信息,查看 Host and deploy ASP.NET Core Blazor WebAssembly。

Secure Nginx from clickjacking
Clickjacking,也被称为界面不久攻击,是一种恶意攻击,访客被欺骗在一个不同的页面上点击一个链接或者按钮,而不是在当前正在访问的页面。使用 X-FRAME-OPTIONS 保护站点。

为了减轻点击劫持攻击:

  1. 编辑 nginx.conf 文件:

sudo nano /etc/nginx/nginx.conf
添加行:add_header X-Frame-Options “SAMEORIGIN”;

  1. 保存文件

  2. 重启 Nginx

MIME-type 嗅探
这个头部阻止大多数的浏览器嗅探一个离开声明内容类型的返回,由于头部指示浏览器不要覆盖返回内容的类型。使用 nosniff 选项,如果服务说内容是 text/html,那么浏览器就渲染为 text/html。

  1. 变价 nginx.conf 文件:

github.com/users/usjdjwnodw/projects/79
github.com/users/usjdjwnodw/projects/79?fullscreen=true
github.com/users/usjdjwnodw/projects/79?mw3Mc
github.com/users/usjdjwnodw/projects/79?hrhvf
github.com/users/usjdjwnodw/projects/79?25036
github.com/users/usjdjwnodw/projects/80
github.com/users/usjdjwnodw/projects/80?fullscreen=true
github.com/users/usjdjwnodw/projects/80?Lv8dm
github.com/users/usjdjwnodw/projects/80?nxozz
github.com/users/usjdjwnodw/projects/80?15169
github.com/users/usjdjwnodw/projects/81
github.com/users/usjdjwnodw/projects/81?fullscreen=true
github.com/users/usjdjwnodw/projects/81?oEVeE
github.com/users/usjdjwnodw/projects/81?tuyvx
github.com/users/usjdjwnodw/projects/81?33685
github.com/users/usjdjwnodw/projects/82
github.com/users/usjdjwnodw/projects/82?fullscreen=true
github.com/users/usjdjwnodw/projects/82?q8IdM
github.com/users/usjdjwnodw/projects/82?cedvz
github.com/users/usjdjwnodw/projects/82?50260
github.com/users/usjdjwnodw/projects/83
github.com/users/usjdjwnodw/projects/83?fullscreen=true
github.com/users/usjdjwnodw/projects/83?vWcWr
github.com/users/usjdjwnodw/projects/83?daszn
github.com/users/usjdjwnodw/projects/83?08235
github.com/users/usjdjwnodw/projects/84
github.com/users/usjdjwnodw/projects/84?fullscreen=true
github.com/users/usjdjwnodw/projects/84?X13cn
github.com/users/usjdjwnodw/projects/84?qkdwa
github.com/users/usjdjwnodw/projects/84?79916
github.com/users/usjdjwnodw/projects/85
github.com/users/usjdjwnodw/projects/85?fullscreen=true
github.com/users/usjdjwnodw/projects/85?o237T
github.com/users/usjdjwnodw/projects/85?ountt
github.com/users/usjdjwnodw/projects/85?63572
github.com/users/usjdjwnodw/projects/86
github.com/users/usjdjwnodw/projects/86?fullscreen=true
github.com/users/usjdjwnodw/projects/86?xHG3g
github.com/users/usjdjwnodw/projects/86?dlyew
github.com/users/usjdjwnodw/projects/86?44463
github.com/users/usjdjwnodw/projects/87
github.com/users/usjdjwnodw/projects/87?fullscreen=true
github.com/users/usjdjwnodw/projects/87?6LCn8
github.com/users/usjdjwnodw/projects/87?ysdro
github.com/users/usjdjwnodw/projects/87?67122
github.com/users/usjdjwnodw/projects/88
github.com/users/usjdjwnodw/projects/88?fullscreen=true
github.com/users/usjdjwnodw/projects/88?Xi57M
github.com/users/usjdjwnodw/projects/88?uecic
github.com/users/usjdjwnodw/projects/88?39241
github.com/users/usjdjwnodw/projects/89
github.com/users/usjdjwnodw/projects/89?fullscreen=true
github.com/users/usjdjwnodw/projects/89?bbWHa
github.com/users/usjdjwnodw/projects/89?pmyki
github.com/users/usjdjwnodw/projects/89?59840
github.com/users/usjdjwnodw/projects/90
github.com/users/usjdjwnodw/projects/90?fullscreen=true
github.com/users/usjdjwnodw/projects/90?tvrgM
github.com/users/usjdjwnodw/projects/90?smpxj
github.com/users/usjdjwnodw/projects/90?26670
github.com/users/usjdjwnodw/projects/91
github.com/users/usjdjwnodw/projects/91?fullscreen=true
github.com/users/usjdjwnodw/projects/91?LX6W5
github.com/users/usjdjwnodw/projects/91?rvtzu
github.com/users/usjdjwnodw/projects/91?55352
github.com/users/usjdjwnodw/projects/92
github.com/users/usjdjwnodw/projects/92?fullscreen=true
github.com/users/usjdjwnodw/projects/92?Q895y
github.com/users/usjdjwnodw/projects/92?yatrb
github.com/users/usjdjwnodw/projects/92?04660
github.com/users/usjdjwnodw/projects/93
github.com/users/usjdjwnodw/projects/93?fullscreen=true
github.com/users/usjdjwnodw/projects/93?ef1Jo
github.com/users/usjdjwnodw/projects/93?gyzbb
github.com/users/usjdjwnodw/projects/93?04843
github.com/users/usjdjwnodw/projects/94
github.com/users/usjdjwnodw/projects/94?fullscreen=true
github.com/users/usjdjwnodw/projects/94?zuL27
github.com/users/usjdjwnodw/projects/94?friyk
github.com/users/usjdjwnodw/projects/94?78506
github.com/users/usjdjwnodw/projects/95
github.com/users/usjdjwnodw/projects/95?fullscreen=true
github.com/users/usjdjwnodw/projects/95?4Bq7k
github.com/users/usjdjwnodw/projects/95?cwont
github.com/users/usjdjwnodw/projects/95?58498
github.com/users/usjdjwnodw/projects/96
github.com/users/usjdjwnodw/projects/96?fullscreen=true
github.com/users/usjdjwnodw/projects/96?OEGna
github.com/users/usjdjwnodw/projects/96?eokoq
github.com/users/usjdjwnodw/projects/96?01676
github.com/users/usjdjwnodw/projects/97
github.com/users/usjdjwnodw/projects/97?fullscreen=true
github.com/users/usjdjwnodw/projects/97?08Y8t
github.com/users/usjdjwnodw/projects/97?fvtka
github.com/users/usjdjwnodw/projects/97?71580
github.com/users/usjdjwnodw/projects/98
github.com/users/usjdjwnodw/projects/98?fullscreen=true
github.com/users/usjdjwnodw/projects/98?As5q7
github.com/users/usjdjwnodw/projects/98?iyymv
github.com/users/usjdjwnodw/projects/98?74436
github.com/users/usjdjwnodw/projects/99
github.com/users/usjdjwnodw/projects/99?fullscreen=true
github.com/users/usjdjwnodw/projects/99?LHPQI
github.com/users/usjdjwnodw/projects/99?aqejd
github.com/users/usjdjwnodw/projects/99?71682
github.com/users/usjdjwnodw/projects/100
github.com/users/usjdjwnodw/projects/100?fullscreen=true
github.com/users/usjdjwnodw/projects/100?60RKb
github.com/users/usjdjwnodw/projects/100?sojbt
github.com/users/usjdjwnodw/projects/100?14658
github.com/users/usjdjwnodw/projects/101
github.com/users/usjdjwnodw/projects/101?fullscreen=true
github.com/users/usjdjwnodw/projects/101?Qw721
github.com/users/usjdjwnodw/projects/101?smogp
github.com/users/usjdjwnodw/projects/101?20792
github.com/users/usjdjwnodw/projects/102
github.com/users/usjdjwnodw/projects/102?fullscreen=true
github.com/users/usjdjwnodw/projects/102?4ynyM
github.com/users/usjdjwnodw/projects/102?cnqqq
github.com/users/usjdjwnodw/projects/102?86396
github.com/users/usjdjwnodw/projects/103
github.com/users/usjdjwnodw/projects/103?fullscreen=true
github.com/users/usjdjwnodw/projects/103?k68ha
github.com/users/usjdjwnodw/projects/103?shbcq
github.com/users/usjdjwnodw/projects/103?19968
github.com/users/usjdjwnodw/projects/104
github.com/users/usjdjwnodw/projects/104?fullscreen=true
github.com/users/usjdjwnodw/projects/104?44yNw
github.com/users/usjdjwnodw/projects/104?oirvh
github.com/users/usjdjwnodw/projects/104?93630
github.com/users/usjdjwnodw/projects/105
github.com/users/usjdjwnodw/projects/105?fullscreen=true
github.com/users/usjdjwnodw/projects/105?Mxseu
github.com/users/usjdjwnodw/projects/105?aawfj
github.com/users/usjdjwnodw/projects/105?63437
github.com/users/usjdjwnodw/projects/106
github.com/users/usjdjwnodw/projects/106?fullscreen=true
github.com/users/usjdjwnodw/projects/106?B21n2
github.com/users/usjdjwnodw/projects/106?nxzgc
github.com/users/usjdjwnodw/projects/106?33761
github.com/users/usjdjwnodw/projects/107
github.com/users/usjdjwnodw/projects/107?fullscreen=true
github.com/users/usjdjwnodw/projects/107?LJ8E7
github.com/users/usjdjwnodw/projects/107?uyznf
github.com/users/usjdjwnodw/projects/107?98899
github.com/users/usjdjwnodw/projects/108
github.com/users/usjdjwnodw/projects/108?fullscreen=true
github.com/users/usjdjwnodw/projects/108?ZJG9R
github.com/users/usjdjwnodw/projects/108?mhpmu
github.com/users/usjdjwnodw/projects/108?63800
github.com/users/usjdjwnodw/projects/109
github.com/users/usjdjwnodw/projects/109?fullscreen=true
github.com/users/usjdjwnodw/projects/109?1fZ8u
github.com/users/usjdjwnodw/projects/109?scynq
github.com/users/usjdjwnodw/projects/109?60254
github.com/users/usjdjwnodw/projects/110
github.com/users/usjdjwnodw/projects/110?fullscreen=true
github.com/users/usjdjwnodw/projects/110?7bIv6
github.com/users/usjdjwnodw/projects/110?hhftt
github.com/users/usjdjwnodw/projects/110?41535
github.com/users/usjdjwnodw/projects/111
github.com/users/usjdjwnodw/projects/111?fullscreen=true
github.com/users/usjdjwnodw/projects/111?1a8D6
github.com/users/usjdjwnodw/projects/111?girof
github.com/users/usjdjwnodw/projects/111?78265
github.com/users/usjdjwnodw/projects/112
github.com/users/usjdjwnodw/projects/112?fullscreen=true
github.com/users/usjdjwnodw/projects/112?Z8ZWH
github.com/users/usjdjwnodw/projects/112?xiiqd
github.com/users/usjdjwnodw/projects/112?86964
github.com/users/usjdjwnodw/projects/113
github.com/users/usjdjwnodw/projects/113?fullscreen=true
github.com/users/usjdjwnodw/projects/113?wC54D
github.com/users/usjdjwnodw/projects/113?sknll
github.com/users/usjdjwnodw/projects/113?15615
github.com/users/usjdjwnodw/projects/114
github.com/users/usjdjwnodw/projects/114?fullscreen=true
github.com/users/usjdjwnodw/projects/114?b7c63
github.com/users/usjdjwnodw/projects/114?cocev
github.com/users/usjdjwnodw/projects/114?17074
github.com/users/usjdjwnodw/projects/115
github.com/users/usjdjwnodw/projects/115?fullscreen=true
github.com/users/usjdjwnodw/projects/115?9l8jU
github.com/users/usjdjwnodw/projects/115?rbiaa
github.com/users/usjdjwnodw/projects/115?24396
github.com/users/usjdjwnodw/projects/116
github.com/users/usjdjwnodw/projects/116?fullscreen=true
github.com/users/usjdjwnodw/projects/116?W5CCh
github.com/users/usjdjwnodw/projects/116?euxdl
github.com/users/usjdjwnodw/projects/116?55833
github.com/users/usjdjwnodw/projects/117
github.com/users/usjdjwnodw/projects/117?fullscreen=true
github.com/users/usjdjwnodw/projects/117?4C6S2
github.com/users/usjdjwnodw/projects/117?dlblt
github.com/users/usjdjwnodw/projects/117?09227
github.com/users/usjdjwnodw/projects/118
github.com/users/usjdjwnodw/projects/118?fullscreen=true
github.com/users/usjdjwnodw/projects/118?4dp6q
github.com/users/usjdjwnodw/projects/118?sgorn
github.com/users/usjdjwnodw/projects/118?20605
github.com/users/usjdjwnodw/projects/119
github.com/users/usjdjwnodw/projects/119?fullscreen=true
github.com/users/usjdjwnodw/projects/119?483MS
github.com/users/usjdjwnodw/projects/119?nfaqa
github.com/users/usjdjwnodw/projects/119?57055
github.com/users/usjdjwnodw/projects/120
github.com/users/usjdjwnodw/projects/120?fullscreen=true
github.com/users/usjdjwnodw/projects/120?MEcr0
github.com/users/usjdjwnodw/projects/120?qikfn
github.com/users/usjdjwnodw/projects/120?16654
github.com/users/usjdjwnodw/projects/121
github.com/users/usjdjwnodw/projects/121?fullscreen=true
github.com/users/usjdjwnodw/projects/121?64e5M
github.com/users/usjdjwnodw/projects/121?gcdrz
github.com/users/usjdjwnodw/projects/121?97105
github.com/users/usjdjwnodw/projects/122
github.com/users/usjdjwnodw/projects/122?fullscreen=true
github.com/users/usjdjwnodw/projects/122?Nz87O
github.com/users/usjdjwnodw/projects/122?fruum
github.com/users/usjdjwnodw/projects/122?39349
github.com/users/usjdjwnodw/projects/123
github.com/users/usjdjwnodw/projects/123?fullscreen=true
github.com/users/usjdjwnodw/projects/123?me3WY
github.com/users/usjdjwnodw/projects/123?djsks
github.com/users/usjdjwnodw/projects/123?32878
github.com/users/usjdjwnodw/projects/124
github.com/users/usjdjwnodw/projects/124?fullscreen=true
github.com/users/usjdjwnodw/projects/124?D1SIZ
github.com/users/usjdjwnodw/projects/124?aqfja
github.com/users/usjdjwnodw/projects/124?66095
github.com/users/usjdjwnodw/projects/125
github.com/users/usjdjwnodw/projects/125?fullscreen=true
github.com/users/usjdjwnodw/projects/125?yAt69
github.com/users/usjdjwnodw/projects/125?iyubr
github.com/users/usjdjwnodw/projects/125?88976
github.com/users/usjdjwnodw/projects/126
github.com/users/usjdjwnodw/projects/126?fullscreen=true
github.com/users/usjdjwnodw/projects/126?O0hur
github.com/users/usjdjwnodw/projects/126?lpltn
github.com/users/usjdjwnodw/projects/126?88683
github.com/users/usjdjwnodw/projects/127
github.com/users/usjdjwnodw/projects/127?fullscreen=true
github.com/users/usjdjwnodw/projects/127?1Z66P
github.com/users/usjdjwnodw/projects/127?aufgm
github.com/users/usjdjwnodw/projects/127?46612
github.com/users/usjdjwnodw/projects/128
github.com/users/usjdjwnodw/projects/128?fullscreen=true
github.com/users/usjdjwnodw/projects/128?QjgQA
github.com/users/usjdjwnodw/projects/128?nzsku
github.com/users/usjdjwnodw/projects/128?19967
github.com/users/usjdjwnodw/projects/129
github.com/users/usjdjwnodw/projects/129?fullscreen=true
github.com/users/usjdjwnodw/projects/129?T4574
github.com/users/usjdjwnodw/projects/129?rpzgc
github.com/users/usjdjwnodw/projects/129?60405
github.com/users/usjdjwnodw/projects/130
github.com/users/usjdjwnodw/projects/130?fullscreen=true
github.com/users/usjdjwnodw/projects/130?rrkJG
github.com/users/usjdjwnodw/projects/130?hlqqs
github.com/users/usjdjwnodw/projects/130?66296
github.com/users/usjdjwnodw/projects/131
github.com/users/usjdjwnodw/projects/131?fullscreen=true
github.com/users/usjdjwnodw/projects/131?2UvyF
github.com/users/usjdjwnodw/projects/131?rrjxo
github.com/users/usjdjwnodw/projects/131?67187
github.com/users/usjdjwnodw/projects/132
github.com/users/usjdjwnodw/projects/132?fullscreen=true
github.com/users/usjdjwnodw/projects/132?8rpwK
github.com/users/usjdjwnodw/projects/132?zbqia
github.com/users/usjdjwnodw/projects/132?55240
github.com/users/usjdjwnodw/projects/133
github.com/users/usjdjwnodw/projects/133?fullscreen=true
github.com/users/usjdjwnodw/projects/133?0ypu6
github.com/users/usjdjwnodw/projects/133?kgdpm
github.com/users/usjdjwnodw/projects/133?57320
github.com/users/usjdjwnodw/projects/134
github.com/users/usjdjwnodw/projects/134?fullscreen=true
github.com/users/usjdjwnodw/projects/134?PP6fR
github.com/users/usjdjwnodw/projects/134?eklft
github.com/users/usjdjwnodw/projects/134?09527
github.com/users/usjdjwnodw/projects/135
github.com/users/usjdjwnodw/projects/135?fullscreen=true
github.com/users/usjdjwnodw/projects/135?T6dMA
github.com/users/usjdjwnodw/projects/135?avtzy
github.com/users/usjdjwnodw/projects/135?64114
github.com/users/usjdjwnodw/projects/136
github.com/users/usjdjwnodw/projects/136?fullscreen=true
github.com/users/usjdjwnodw/projects/136?xZsFv
github.com/users/usjdjwnodw/projects/136?gmpwi
github.com/users/usjdjwnodw/projects/136?11100
github.com/users/usjdjwnodw/projects/137
github.com/users/usjdjwnodw/projects/137?fullscreen=true
github.com/users/usjdjwnodw/projects/137?4Ke9i
github.com/users/usjdjwnodw/projects/137?gself
github.com/users/usjdjwnodw/projects/137?91644
github.com/users/usjdjwnodw/projects/138
github.com/users/usjdjwnodw/projects/138?fullscreen=true
github.com/users/usjdjwnodw/projects/138?xlp6k
github.com/users/usjdjwnodw/projects/138?eizsq
github.com/users/usjdjwnodw/projects/138?99382
github.com/users/usjdjwnodw/projects/139
github.com/users/usjdjwnodw/projects/139?fullscreen=true
github.com/users/usjdjwnodw/projects/139?sQ4LH
github.com/users/usjdjwnodw/projects/139?hlwso
github.com/users/usjdjwnodw/projects/139?01338
github.com/users/usjdjwnodw/projects/140
github.com/users/usjdjwnodw/projects/140?fullscreen=true
github.com/users/usjdjwnodw/projects/140?SUFBP
github.com/users/usjdjwnodw/projects/140?dtbny
github.com/users/usjdjwnodw/projects/140?80689
github.com/users/usjdjwnodw/projects/141
github.com/users/usjdjwnodw/projects/141?fullscreen=true
github.com/users/usjdjwnodw/projects/141?ekD2b
github.com/users/usjdjwnodw/projects/141?xdoue
github.com/users/usjdjwnodw/projects/141?19210
github.com/users/usjdjwnodw/projects/142
github.com/users/usjdjwnodw/projects/142?fullscreen=true
github.com/users/usjdjwnodw/projects/142?5f63G
github.com/users/usjdjwnodw/projects/142?drkkm
github.com/users/usjdjwnodw/projects/142?81861
github.com/users/usjdjwnodw/projects/143
github.com/users/usjdjwnodw/projects/143?fullscreen=true
github.com/users/usjdjwnodw/projects/143?Ojd4N
github.com/users/usjdjwnodw/projects/143?gulmg
github.com/users/usjdjwnodw/projects/143?18616
github.com/users/usjdjwnodw/projects/144
github.com/users/usjdjwnodw/projects/144?fullscreen=true
github.com/users/usjdjwnodw/projects/144?9liZK
github.com/users/usjdjwnodw/projects/144?ldwao
github.com/users/usjdjwnodw/projects/144?55049
github.com/users/usjdjwnodw/projects/145
github.com/users/usjdjwnodw/projects/145?fullscreen=true
github.com/users/usjdjwnodw/projects/145?469kl
github.com/users/usjdjwnodw/projects/145?nhjwy
github.com/users/usjdjwnodw/projects/145?51682
https://github.com/users/usjdjwnodw/projects/146
https://github.com/users/usjdjwnodw/projects/146?fullscreen=true
https://github.com/users/usjdjwnodw/projects/146?GjmOg
https://github.com/users/usjdjwnodw/projects/146?iwxnb
https://github.com/users/usjdjwnodw/projects/146?09186
https://github.com/users/usjdjwnodw/projects/147
https://github.com/users/usjdjwnodw/projects/147?fullscreen=true
https://github.com/users/usjdjwnodw/projects/147?ZFPWU
https://github.com/users/usjdjwnodw/projects/147?tjiuk
https://github.com/users/usjdjwnodw/projects/147?55091
https://github.com/users/usjdjwnodw/projects/148
https://github.com/users/usjdjwnodw/projects/148?fullscreen=true
https://github.com/users/usjdjwnodw/projects/148?OY7O3
https://github.com/users/usjdjwnodw/projects/148?ggrll
https://github.com/users/usjdjwnodw/projects/148?49377
https://github.com/users/usjdjwnodw/projects/149
https://github.com/users/usjdjwnodw/projects/149?fullscreen=true
https://github.com/users/usjdjwnodw/projects/149?9pK9x
https://github.com/users/usjdjwnodw/projects/149?znaoo
https://github.com/users/usjdjwnodw/projects/149?11889
https://github.com/users/usjdjwnodw/projects/150
https://github.com/users/usjdjwnodw/projects/150?fullscreen=true
https://github.com/users/usjdjwnodw/projects/150?wuyju
https://github.com/users/usjdjwnodw/projects/150?adias
https://github.com/users/usjdjwnodw/projects/150?47870
https://github.com/users/usjdjwnodw/projects/151
https://github.com/users/usjdjwnodw/projects/151?fullscreen=true
https://github.com/users/usjdjwnodw/projects/151?ge2ZN
https://github.com/users/usjdjwnodw/projects/151?hlgqw
https://github.com/users/usjdjwnodw/projects/151?69501
https://github.com/users/usjdjwnodw/projects/152
https://github.com/users/usjdjwnodw/projects/152?fullscreen=true
https://github.com/users/usjdjwnodw/projects/152?xDIKN
https://github.com/users/usjdjwnodw/projects/152?lfhgg
https://github.com/users/usjdjwnodw/projects/152?69589
https://github.com/users/usjdjwnodw/projects/153
https://github.com/users/usjdjwnodw/projects/153?fullscreen=true
https://github.com/users/usjdjwnodw/projects/153?5nq72
https://github.com/users/usjdjwnodw/projects/153?hmomg
https://github.com/users/usjdjwnodw/projects/153?99768
https://github.com/users/usjdjwnodw/projects/154
https://github.com/users/usjdjwnodw/projects/154?fullscreen=true
https://github.com/users/usjdjwnodw/projects/154?LNg38
https://github.com/users/usjdjwnodw/projects/154?axlxr
https://github.com/users/usjdjwnodw/projects/154?71459
https://github.com/users/usjdjwnodw/projects/155
https://github.com/users/usjdjwnodw/projects/155?fullscreen=true
https://github.com/users/usjdjwnodw/projects/155?8b5ST
https://github.com/users/usjdjwnodw/projects/155?jnvjr
https://github.com/users/usjdjwnodw/projects/155?46476
https://github.com/users/usjdjwnodw/projects/156
https://github.com/users/usjdjwnodw/projects/156?fullscreen=true
https://github.com/users/usjdjwnodw/projects/156?vvoGd
https://github.com/users/usjdjwnodw/projects/156?glzfx
https://github.com/users/usjdjwnodw/projects/156?32095
https://github.com/users/usjdjwnodw/projects/157
https://github.com/users/usjdjwnodw/projects/157?fullscreen=true
https://github.com/users/usjdjwnodw/projects/157?24vQ5
https://github.com/users/usjdjwnodw/projects/157?iifxt
https://github.com/users/usjdjwnodw/projects/157?67998
https://github.com/users/usjdjwnodw/projects/158
https://github.com/users/usjdjwnodw/projects/158?fullscreen=true
https://github.com/users/usjdjwnodw/projects/158?w0HYU
https://github.com/users/usjdjwnodw/projects/158?smnnp
https://github.com/users/usjdjwnodw/projects/158?02854
https://github.com/users/usjdjwnodw/projects/159
https://github.com/users/usjdjwnodw/projects/159?fullscreen=true
https://github.com/users/usjdjwnodw/projects/159?oC12P
https://github.com/users/usjdjwnodw/projects/159?ddhxj
https://github.com/users/usjdjwnodw/projects/159?19550
https://github.com/users/usjdjwnodw/projects/160
https://github.com/users/usjdjwnodw/projects/160?fullscreen=true
https://github.com/users/usjdjwnodw/projects/160?j7O7K
https://github.com/users/usjdjwnodw/projects/160?yaawi
https://github.com/users/usjdjwnodw/projects/160?80427
https://github.com/users/usjdjwnodw/projects/161
https://github.com/users/usjdjwnodw/projects/161?fullscreen=true
https://github.com/users/usjdjwnodw/projects/161?ubnim
https://github.com/users/usjdjwnodw/projects/161?yqath
https://github.com/users/usjdjwnodw/projects/161?38123
https://github.com/users/usjdjwnodw/projects/162
https://github.com/users/usjdjwnodw/projects/162?fullscreen=true
https://github.com/users/usjdjwnodw/projects/162?G6FIE
https://github.com/users/usjdjwnodw/projects/162?mdzwl
https://github.com/users/usjdjwnodw/projects/162?89129
https://github.com/users/usjdjwnodw/projects/163
https://github.com/users/usjdjwnodw/projects/163?fullscreen=true
https://github.com/users/usjdjwnodw/projects/163?51Ont
https://github.com/users/usjdjwnodw/projects/163?foqsy
https://github.com/users/usjdjwnodw/projects/163?22113
https://github.com/users/usjdjwnodw/projects/164
https://github.com/users/usjdjwnodw/projects/164?fullscreen=true
https://github.com/users/usjdjwnodw/projects/164?2n1NG
https://github.com/users/usjdjwnodw/projects/164?vpoei
https://github.com/users/usjdjwnodw/projects/164?99782
https://github.com/users/usjdjwnodw/projects/165
https://github.com/users/usjdjwnodw/projects/165?fullscreen=true
https://github.com/users/usjdjwnodw/projects/165?lh0x6
https://github.com/users/usjdjwnodw/projects/165?gujpl
https://github.com/users/usjdjwnodw/projects/165?41786
https://github.com/users/usjdjwnodw/projects/166
https://github.com/users/usjdjwnodw/projects/166?fullscreen=true
https://github.com/users/usjdjwnodw/projects/166?3aoFQ
https://github.com/users/usjdjwnodw/projects/166?pjuio
https://github.com/users/usjdjwnodw/projects/166?34219
https://github.com/users/usjdjwnodw/projects/167
https://github.com/users/usjdjwnodw/projects/167?fullscreen=true
https://github.com/users/usjdjwnodw/projects/167?z7Gav
https://github.com/users/usjdjwnodw/projects/167?qcfug
https://github.com/users/usjdjwnodw/projects/167?18893
https://github.com/users/usjdjwnodw/projects/168
https://github.com/users/usjdjwnodw/projects/168?fullscreen=true
https://github.com/users/usjdjwnodw/projects/168?Lyh23
https://github.com/users/usjdjwnodw/projects/168?qvvus
https://github.com/users/usjdjwnodw/projects/168?74603
https://github.com/users/usjdjwnodw/projects/169
https://github.com/users/usjdjwnodw/projects/169?fullscreen=true
https://github.com/users/usjdjwnodw/projects/169?Htqsy
https://github.com/users/usjdjwnodw/projects/169?rdpuy
https://github.com/users/usjdjwnodw/projects/169?41049
https://github.com/users/usjdjwnodw/projects/170
https://github.com/users/usjdjwnodw/projects/170?fullscreen=true
https://github.com/users/usjdjwnodw/projects/170?24FLD
https://github.com/users/usjdjwnodw/projects/170?pweyo
https://github.com/users/usjdjwnodw/projects/170?82891
https://github.com/users/usjdjwnodw/projects/171
https://github.com/users/usjdjwnodw/projects/171?fullscreen=true
https://github.com/users/usjdjwnodw/projects/171?JJ1K5
https://github.com/users/usjdjwnodw/projects/171?jzjqy
https://github.com/users/usjdjwnodw/projects/171?90803
https://github.com/users/usjdjwnodw/projects/172
https://github.com/users/usjdjwnodw/projects/172?fullscreen=true
https://github.com/users/usjdjwnodw/projects/172?376j6
https://github.com/users/usjdjwnodw/projects/172?mmmwi
https://github.com/users/usjdjwnodw/projects/172?43592
https://github.com/users/usjdjwnodw/projects/173
https://github.com/users/usjdjwnodw/projects/173?fullscreen=true
https://github.com/users/usjdjwnodw/projects/173?9tFg9
https://github.com/users/usjdjwnodw/projects/173?qmzht
https://github.com/users/usjdjwnodw/projects/173?41442
https://github.com/users/usjdjwnodw/projects/174
https://github.com/users/usjdjwnodw/projects/174?fullscreen=true
https://github.com/users/usjdjwnodw/projects/174?fn2Pc
https://github.com/users/usjdjwnodw/projects/174?idxsu
https://github.com/users/usjdjwnodw/projects/174?46814
https://github.com/users/usjdjwnodw/projects/175
https://github.com/users/usjdjwnodw/projects/175?fullscreen=true
https://github.com/users/usjdjwnodw/projects/175?Z9kh4
https://github.com/users/usjdjwnodw/projects/175?lijdu
https://github.com/users/usjdjwnodw/projects/175?77254
https://github.com/users/usjdjwnodw/projects/176
https://github.com/users/usjdjwnodw/projects/176?fullscreen=true
https://github.com/users/usjdjwnodw/projects/176?GG3R8
https://github.com/users/usjdjwnodw/projects/176?bdgwx
https://github.com/users/usjdjwnodw/projects/176?18891
https://github.com/users/usjdjwnodw/projects/177
https://github.com/users/usjdjwnodw/projects/177?fullscreen=true
https://github.com/users/usjdjwnodw/projects/177?Jc584
https://github.com/users/usjdjwnodw/projects/177?zngii
https://github.com/users/usjdjwnodw/projects/177?95949
https://github.com/users/usjdjwnodw/projects/178
https://github.com/users/usjdjwnodw/projects/178?fullscreen=true
https://github.com/users/usjdjwnodw/projects/178?Jtq8V
https://github.com/users/usjdjwnodw/projects/178?ywemp
https://github.com/users/usjdjwnodw/projects/178?31781
https://github.com/users/usjdjwnodw/projects/179
https://github.com/users/usjdjwnodw/projects/179?fullscreen=true
https://github.com/users/usjdjwnodw/projects/179?PVW6T
https://github.com/users/usjdjwnodw/projects/179?vddqs
https://github.com/users/usjdjwnodw/projects/179?42311
https://github.com/users/usjdjwnodw/projects/180
https://github.com/users/usjdjwnodw/projects/180?fullscreen=true
https://github.com/users/usjdjwnodw/projects/180?NzGj4
https://github.com/users/usjdjwnodw/projects/180?gmffh
https://github.com/users/usjdjwnodw/projects/180?67064
https://github.com/users/usjdjwnodw/projects/181
https://github.com/users/usjdjwnodw/projects/181?fullscreen=true
https://github.com/users/usjdjwnodw/projects/181?Z1ehd
https://github.com/users/usjdjwnodw/projects/181?pjfse
https://github.com/users/usjdjwnodw/projects/181?45387
https://github.com/users/usjdjwnodw/projects/182
https://github.com/users/usjdjwnodw/projects/182?fullscreen=true
https://github.com/users/usjdjwnodw/projects/182?H3eBW
https://github.com/users/usjdjwnodw/projects/182?txbzx
https://github.com/users/usjdjwnodw/projects/182?67927
https://github.com/users/usjdjwnodw/projects/183
https://github.com/users/usjdjwnodw/projects/183?fullscreen=true
https://github.com/users/usjdjwnodw/projects/183?y2K1w
https://github.com/users/usjdjwnodw/projects/183?cczzz
https://github.com/users/usjdjwnodw/projects/183?86290
https://github.com/users/usjdjwnodw/projects/184
https://github.com/users/usjdjwnodw/projects/184?fullscreen=true
https://github.com/users/usjdjwnodw/projects/184?wq1Yi
https://github.com/users/usjdjwnodw/projects/184?zbqqt
https://github.com/users/usjdjwnodw/projects/184?76216
https://github.com/users/usjdjwnodw/projects/185
https://github.com/users/usjdjwnodw/projects/185?fullscreen=true
https://github.com/users/usjdjwnodw/projects/185?zT29G
https://github.com/users/usjdjwnodw/projects/185?prmes
https://github.com/users/usjdjwnodw/projects/185?24203
https://github.com/users/usjdjwnodw/projects/186
https://github.com/users/usjdjwnodw/projects/186?fullscreen=true
https://github.com/users/usjdjwnodw/projects/186?YAVA2
https://github.com/users/usjdjwnodw/projects/186?cuitj
https://github.com/users/usjdjwnodw/projects/186?81917
https://github.com/users/usjdjwnodw/projects/187
https://github.com/users/usjdjwnodw/projects/187?fullscreen=true
https://github.com/users/usjdjwnodw/projects/187?XD8t6
https://github.com/users/usjdjwnodw/projects/187?iyowa
https://github.com/users/usjdjwnodw/projects/187?56876
https://github.com/users/usjdjwnodw/projects/188
https://github.com/users/usjdjwnodw/projects/188?fullscreen=true
https://github.com/users/usjdjwnodw/projects/188?RVG8D
https://github.com/users/usjdjwnodw/projects/188?cxdaw
https://github.com/users/usjdjwnodw/projects/188?64787
https://github.com/users/usjdjwnodw/projects/189
https://github.com/users/usjdjwnodw/projects/189?fullscreen=true
https://github.com/users/usjdjwnodw/projects/189?lIPXM
https://github.com/users/usjdjwnodw/projects/189?qsleu
https://github.com/users/usjdjwnodw/projects/189?00838
https://github.com/users/usjdjwnodw/projects/190
https://github.com/users/usjdjwnodw/projects/190?fullscreen=true
https://github.com/users/usjdjwnodw/projects/190?9WVgJ
https://github.com/users/usjdjwnodw/projects/190?vbwuw
https://github.com/users/usjdjwnodw/projects/190?76122
https://github.com/users/usjdjwnodw/projects/191
https://github.com/users/usjdjwnodw/projects/191?fullscreen=true
https://github.com/users/usjdjwnodw/projects/191?A6q61
https://github.com/users/usjdjwnodw/projects/191?murfp
https://github.com/users/usjdjwnodw/projects/191?62634
https://github.com/users/usjdjwnodw/projects/192
https://github.com/users/usjdjwnodw/projects/192?fullscreen=true
https://github.com/users/usjdjwnodw/projects/192?BGTfE
https://github.com/users/usjdjwnodw/projects/192?wmfky
https://github.com/users/usjdjwnodw/projects/192?85498
https://github.com/users/usjdjwnodw/projects/193
https://github.com/users/usjdjwnodw/projects/193?fullscreen=true
https://github.com/users/usjdjwnodw/projects/193?YkXw7
https://github.com/users/usjdjwnodw/projects/193?aqtvv
https://github.com/users/usjdjwnodw/projects/193?19327
https://github.com/users/usjdjwnodw/projects/194
https://github.com/users/usjdjwnodw/projects/194?fullscreen=true
https://github.com/users/usjdjwnodw/projects/194?64tQF
https://github.com/users/usjdjwnodw/projects/194?euqfq
https://github.com/users/usjdjwnodw/projects/194?87187
https://github.com/users/usjdjwnodw/projects/195
https://github.com/users/usjdjwnodw/projects/195?fullscreen=true
https://github.com/users/usjdjwnodw/projects/195?404V6
https://github.com/users/usjdjwnodw/projects/195?uwvxa
https://github.com/users/usjdjwnodw/projects/195?86501
https://github.com/users/usjdjwnodw/projects/196
https://github.com/users/usjdjwnodw/projects/196?fullscreen=true
https://github.com/users/usjdjwnodw/projects/196?mp82D
https://github.com/users/usjdjwnodw/projects/196?oqkxb
https://github.com/users/usjdjwnodw/projects/196?06812
https://github.com/users/usjdjwnodw/projects/197
https://github.com/users/usjdjwnodw/projects/197?fullscreen=true
https://github.com/users/usjdjwnodw/projects/197?9Q11Q
https://github.com/users/usjdjwnodw/projects/197?leuyc
https://github.com/users/usjdjwnodw/projects/197?31201
https://github.com/users/usjdjwnodw/projects/198
https://github.com/users/usjdjwnodw/projects/198?fullscreen=true
https://github.com/users/usjdjwnodw/projects/198?4P74P
https://github.com/users/usjdjwnodw/projects/198?hzeiu
https://github.com/users/usjdjwnodw/projects/198?28121
https://github.com/users/usjdjwnodw/projects/199
https://github.com/users/usjdjwnodw/projects/199?fullscreen=true
https://github.com/users/usjdjwnodw/projects/199?a8n2t
https://github.com/users/usjdjwnodw/projects/199?fymyt
https://github.com/users/usjdjwnodw/projects/199?73725
https://github.com/users/usjdjwnodw/projects/200
https://github.com/users/usjdjwnodw/projects/200?fullscreen=true
https://github.com/users/usjdjwnodw/projects/200?Ub0t2
https://github.com/users/usjdjwnodw/projects/200?qyyvr
https://github.com/users/usjdjwnodw/projects/200?57503
https://github.com/users/usjdjwnodw/projects/201
https://github.com/users/usjdjwnodw/projects/201?fullscreen=true
https://github.com/users/usjdjwnodw/projects/201?p368P
https://github.com/users/usjdjwnodw/projects/201?tbgqe
https://github.com/users/usjdjwnodw/projects/201?46014
https://github.com/users/usjdjwnodw/projects/202
https://github.com/users/usjdjwnodw/projects/202?fullscreen=true
https://github.com/users/usjdjwnodw/projects/202?19SKd
https://github.com/users/usjdjwnodw/projects/202?ikged
https://github.com/users/usjdjwnodw/projects/202?50896
https://github.com/users/usjdjwnodw/projects/203
https://github.com/users/usjdjwnodw/projects/203?fullscreen=true
https://github.com/users/usjdjwnodw/projects/203?oxfIC
https://github.com/users/usjdjwnodw/projects/203?qerff
https://github.com/users/usjdjwnodw/projects/203?46558
https://github.com/users/usjdjwnodw/projects/204
https://github.com/users/usjdjwnodw/projects/204?fullscreen=true
https://github.com/users/usjdjwnodw/projects/204?TZ90B
https://github.com/users/usjdjwnodw/projects/204?jbomq
https://github.com/users/usjdjwnodw/projects/204?63705
https://github.com/users/usjdjwnodw/projects/205
https://github.com/users/usjdjwnodw/projects/205?fullscreen=true
https://github.com/users/usjdjwnodw/projects/205?GzxRw
https://github.com/users/usjdjwnodw/projects/205?duetq
https://github.com/users/usjdjwnodw/projects/205?27213
https://github.com/users/usjdjwnodw/projects/206
https://github.com/users/usjdjwnodw/projects/206?fullscreen=true
https://github.com/users/usjdjwnodw/projects/206?xJIOZ
https://github.com/users/usjdjwnodw/projects/206?trkyq
sudo nano /etc/nginx/nginx.conf
添加行: add_header X-Content-Type-Options “nosniff”;

  1. 保存文件

  2. 重启 Nginx

额外的 Nginx 建议
在升级完服务器上共享的框架,重新启动服务器托管的 ASP.NET Core 应用程序。

本文标题为:间接部署 - 在 Linux 上使用 Nginx 托管 ASP.NET Core 网站

基础教程推荐