.NET 5 Web API 布署到 Linux 上执行的时候,会跑在一个 Kestrel 服务器上。Kestrel 从 .NET Core 1.x 发展至今,其实功能已经相当完善,可以直接当作对外的窗口。不过本系列不会用内建的 Kestrel 来对外,而是使用一个同样轻巧、但是高效又炫炮的 web server 来帮我们做反向代理(inverse proxy),而这个炫炮的 server 就 Nginx。
笔者之前尝试自己写这段,但是後来找参考资料的时候发现这篇,就决定把自己写的全部删掉,直接开传送门就好…等级差太多了QQ
不过,懒人包还是要有,web server以最粗浅的理解就是:
一样透过 yum 直接下载并安装 Nginx
sudo yum install sudo yum install nginx
Nginx 其实是依附在 EPEL (Extra Packages for Enterprise Linux) 这个 Package 之中,GCP 的 CentOS 内建这个 EPEL所以可以直接安装,如果邦友是用 DigitalOcean 的 CentOS,会需要先安装 EPEL
sudo yum install epel-release
装完之後,就能透过 systemctl 启动 Nginx
sudo systemctl start nginx
接着到浏览器输入 http://外部IP(不是 https 喔)就能看到 Nginx 在 CentOS 上的预设首页
这里稍微说明一下,刚安装完 Nginx 尚未做任何设定之前,Nginx 只帮我们处理 80 port 的 http request,而且会直接回覆静态的 Welcome 首页。因为 http request 预设走 80 port;https 走443,所以当我们发送 http request到我们的 VM 时,Nginx 就会帮我们回覆上面那个页面。发送 https request 则会连不到东西 XD
Nginx 预设不会随着开机启动,为了方便,我们一样透过 enable 指令把它加入开机自动启动的名单中
sudo systemctl enable nginx
目前我们的 Nginx 是根据 /etc/nginx/nginx.conf 这个预设设定档在执行,根据前辈们的建议,比较好的做法是把这个档案里的 server 区段注解掉,然後让同样这个档案里的 include /etc/nginx/conf.d/*.conf;
引入其他设定。
所以首先,先打开预设的设定档
sudo vi /etc/nginx/nginx.conf
然後把 server 区段用井号(#)注解掉
# server {
# listen 80;
# listen [::]:80;
# server_name _;
# root /usr/share/nginx/html;
#
# # Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
#
# error_page 404 /404.html;
# location = /404.html {
# }
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
# }
接着,在 /etc/nginx/conf.d/ 资料夹底下,新增属於我们 API 专案的设定档
sudo touch /etc/nginx/conf.d/ironman.conf
再用 vim 打开这个档案,加入下列设定
server {
listen 80;
server_name example.com *.example.com;
location / {
proxy_pass http://127.0.0.1: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;
}
}
存档之後用 sudo nginx -t
指令测试设定档有没有问题。没有问题的话就能用 sudo nginx -s reload
让 Nginx 重新载入设定档
这时候如果马上就开启浏览器连我们的 VM,会跳出 502 Bad Gateway 错误,这是因为 CentOS 有一个叫做 Security-Enhanced Linux (SELinux) 的东西来加强安全性,它会阻挡我们的连线。我们可以用下列这行指令来解决这个问题
sudo setsebool -P httpd_can_network_connect on
执行完毕之後,再次到浏览器输入 http://外部IP/api/User 就会发现,我们的 http request 最後会变成 https://外部IP:5001/api/User,原因是我们的 request 被 Nginx 转发到 127.0.0.1:5000(本机的 5000 port),然後 .NET 玉社会把 http request 重新导向到 https 监听的 port,於是最後我们就从https://外部IP:5001/api/User 取得我们的资料。
Nginx 虽然轻巧而且功能强大,但是笔者觉得它的水也有点深,关於 Nginx 更多的知识与设定,请参考前面传送门的续篇。
明天我们将会稍微介绍一下如何为我们的 Nginx 挂上 SSL 凭证,替它加上锁头。
Tailwindcss 使用 normalize.css 来当作初始化样式,和 Bootstrap...
今天我们要介绍的是python当中的FOR回圈,所谓的回圈就是只我们如果要在某个条件下要重复做某些事...
今天就要打疫苗了 然後我现在还没睡 掰了 明天没看到我的文就代表真的掰了 QQ 好 今天准备的内容比...
承认我们都有一些资讯焦虑 我们生活在快速变动的时代,无时无刻都有新的产业跟名词冒出,数据驱动决策、区...
驶向新方向~ 需要花钱买交通工具吗? 每个人对於交通工具的使用需求不同,对某些偶尔使用的人来说,有需...