Vapor 2.0 - 使用Nginx進(jìn)行部署(Deploying with Nginx)

前往 Vapor 2.0 - 文檔目錄

Nginx是一個(gè)非??焖伲?jīng)過(guò)測(cè)試,易于配置的HTTP服務(wù)器和代理。雖然Vapor支持使用或不使用TLS直接提供HTTP請(qǐng)求,但是Nginx后面的代理可以提供更高的性能,安全性和易用性。

注意
我們建議代理Nginx后面的Vapor HTTP服務(wù)器。

概述(Overview)

代理HTTP服務(wù)器意味著什么?簡(jiǎn)而言之,代理人作為公共互聯(lián)網(wǎng)和HTTP服務(wù)器之間的中間人。請(qǐng)求到代理,然后發(fā)送到Vapor。

這個(gè)中間人代理的一個(gè)重要特征是它可以改變甚至重定向請(qǐng)求。例如,代理可以要求客戶(hù)端使用TLS(https),速率限制請(qǐng)求,甚至可以在不與您的Vapor應(yīng)用程序通信的情況下提供公共文件。

更多細(xì)節(jié)(More Detail)

用于接收HTTP請(qǐng)求的默認(rèn)端口是80端口(HTTPS是443端口)。當(dāng)您將Vapor服務(wù)器綁定到80端口時(shí),它將直接接收并響應(yīng)到您的服務(wù)器的HTTP請(qǐng)求。當(dāng)添加像Nginx這樣的代理程序時(shí),可以將Vapor綁定到內(nèi)部端口,如8080端口。

注意
大于1024的端口不需要sudo綁定。

當(dāng)Vapor綁定到80端口或443端口時(shí),外部互聯(lián)網(wǎng)不可訪(fǎng)問(wèn)。然后,您將Nginx綁定到80端口,并將其配置為將請(qǐng)求路徑到8080端口(或您選擇的任何端口)上綁定的Vapor服務(wù)器。

就是這樣 。如果Nginx配置正確,您會(huì)看到您的Vapor應(yīng)用程序響應(yīng)80端口上的請(qǐng)求。Nginx在不可見(jiàn)的情況下代理請(qǐng)求和響應(yīng)。

安裝Nginx(Install Nginx)

第一步是安裝Nginx。Nginx的一個(gè)重要部分是圍繞它的大量社區(qū)資源和文檔。因此,我們不會(huì)在這里詳細(xì)介紹Nginx,因?yàn)閹缀蹩隙〞?huì)有一個(gè)專(zhuān)門(mén)的平臺(tái)、操作系統(tǒng)和提供程序的教程。

教程:

APT

Nginx可以通過(guò)APT安裝。

sudo apt-get update
sudo apt-get install nginx

在瀏覽器中訪(fǎng)問(wèn)服務(wù)器的IP地址,檢查Nginx是否正確安裝

http://server_domain_name_or_IP

服務(wù)(Server)

該服務(wù)可以啟動(dòng)或停止。

sudo service nginx stop
sudo service nginx start
sudo service nginx restart

引導(dǎo)蒸氣(Booting Vapor)

Nginx可以用sudo service nginx ...命令啟動(dòng)一個(gè)停止。您將需要類(lèi)似啟動(dòng)和停止您的Vapor服務(wù)器的東西。

有很多方法可以做到這一點(diǎn),它們?nèi)Q于您要部署的平臺(tái)。查看管理員說(shuō)明,添加啟動(dòng)和停止Vapor應(yīng)用程序的命令。

配置代理(Configure Proxy)

/etc/nginx/sites-enabled/里可以找到啟用的站點(diǎn)的配置文件。

創(chuàng)建一個(gè)新的文件或復(fù)制示例模板從/etc/nginx/sites-available/開(kāi)始。

下面是一個(gè)示例配置文件,用于在主目錄中名為Hello的Vapor項(xiàng)目。

server {
    server_name hello.com;
    listen 80;

    root /home/vapor/Hello/Public/;

    location @proxy {
        proxy_pass http://127.0.0.1:8080;
        proxy_pass_header Server;
        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_pass_header Server;
        proxy_connect_timeout 3s;
        proxy_read_timeout 10s;
    }
}

這個(gè)配置文件假設(shè)Hello項(xiàng)目在生產(chǎn)模式下啟動(dòng)時(shí)綁定到8080端口。

服務(wù)文件(Serving Files)

Nginx也可以提供公共文件,而不要求您的Vapor應(yīng)用程序。這可以通過(guò)在重負(fù)載下為其他任務(wù)釋放Vapor的過(guò)程來(lái)提高性能。

server {
    ...

    # Serve all public/static files via nginx and then fallback to Vapor for the rest
    try_files $uri @proxy;

    location @proxy {
        ...
    }
}

TLS

添加TLS相對(duì)簡(jiǎn)單,只要證書(shū)已經(jīng)被正確地生成的。免費(fèi)生成TLS證書(shū),請(qǐng)查看 Let's Encrypt

server {
    ...

    listen 443 ssl;

    ssl_certificate /etc/letsencrypt/live/hello.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/hello.com/privkey.pem;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_stapling on;
    ssl_stapling_verify on;
    add_header Strict-Transport-Security max-age=15768000;

    ...

    location @proxy {
       ...
    }
}

上面的配置是使用Nginx的TLS的相對(duì)嚴(yán)格的設(shè)置。這里的一些設(shè)置不是必需的,但增強(qiáng)安全性。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容