我为我的应用程序构建了一个Vapor后端,它与MacBook上的本地Xcode-Projects很好地结合在一起。
昨天,我开始将后端部署到我的服务器。我能够安装所有内容,并且服务器可以运行。我也对nginx进行了一些配置,但是我无法使其正常运行,因为在整个服务器领域我还很陌生。 Nginx获取了请求,但我不知道该如何处理,因此将触发“ routes.swift”文件。
事情是我不知道如何路由我的请求,以使Vapor应用程序像在本地一样理解它。
我的nginx“站点可用”文件看起来像这样:
server {
server_name [DOMAIN];
listen 80;
root /root/SpatzkopfBackend/;
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;
}
}
示例请求:使用网址为IP / image /
的POST上传通过多部分数据处理的图像nginx给我一个如下错误:
2019/11/29 11:38:19 [错误] 18098#18098:* 1找不到“ /root/SpatzkopfBackend/image/index.html”(2:无此类文件或目录),客户端:[IP ],服务器:[DOMAIN],请求:“ POST / image / HTTP / 1.1”,主机:“ [DOMAIN]”
有人能够帮助我,真是太好了! :)
我的具有SSL和websockets支持的生产配置
server {
listen 443;
listen [::]:443;
server_name mydomain.com;
error_log /var/log/mydomain.com_error.log warn;
access_log /var/log/mydomain.com_access.log;
ssl on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem;
ssl_ciphers 'HIGH:!aNULL:!MD5:!kEDH';
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";
ssl_stapling on;
ssl_stapling_verify on;
large_client_header_buffers 8 32k;
location / {
# redirect all traffic to localhost:8080;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-NginX-Proxy true;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://127.0.0.1:8080/;
proxy_redirect off;
proxy_read_timeout 86400;
# enables WS support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# prevents 502 bad gateway error
proxy_buffers 8 32k;
proxy_buffer_size 64k;
reset_timedout_connection on;
tcp_nodelay on;
client_max_body_size 10m;
}
location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml|html|mp4)$ {
access_log off;
expires 30d;
root /apps/myApp/Public;
}
}
在配置末尾,您可以看到Public
文件夹nginx中的静态文件将直接返回而无需运行Vapor应用程序。
在您的config.swift
文件中,您仅应将FileMiddleware
用于macOS
,因为您在没有nginx的情况下测试应用程序,因为该中间件确实很慢,因此建议您将其放入编译器检查中]]
#if os(macOS)
middlewares.use(FileMiddleware.self) // Serves files from `Public/` directory
#endif