如何使用nginx将请求路由到我的Vapor应用程序?

问题描述 投票:1回答:1

我为我的应用程序构建了一个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]”

有人能够帮助我,真是太好了! :)

ios swift nginx vapor
1个回答
0
投票

我的具有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
© www.soinside.com 2019 - 2024. All rights reserved.