Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nginx Can';在我的web服务器上,无法从教程访问我的Vapor应用程序_Nginx_Vapor - Fatal编程技术网

Nginx Can';在我的web服务器上,无法从教程访问我的Vapor应用程序

Nginx Can';在我的web服务器上,无法从教程访问我的Vapor应用程序,nginx,vapor,Nginx,Vapor,我想在我的服务器上部署一个Vapor应用程序,将其用作iOS应用程序的后端 我对这个话题很陌生。我以前做的唯一一件事就是在同一台服务器上部署Django后端。我重建服务器以设置Vapor后端 首先,我想部署一个尽可能基本的Vapor应用程序。 我遵循了本教程(很短): 我按照步骤操作,没有出现错误 问题是,当我像在教程中那样尝试调用[IP]/hello时,我得到的答案是502坏网关 Nginx给了我这个错误: connect() failed (111: Connection refused)

我想在我的服务器上部署一个Vapor应用程序,将其用作iOS应用程序的后端

我对这个话题很陌生。我以前做的唯一一件事就是在同一台服务器上部署Django后端。我重建服务器以设置Vapor后端

首先,我想部署一个尽可能基本的Vapor应用程序。 我遵循了本教程(很短):

我按照步骤操作,没有出现错误

问题是,当我像在教程中那样尝试调用
[IP]/hello
时,我得到的答案是
502坏网关

Nginx给了我这个错误:

connect() failed (111: Connection refused) while connecting to upstream, client: [IP], server: _, request: "GET /hello HTTP/1.1", upstream: "http://127.0.0.1:8080/hello", host: "[IP]"
我希望你能在这方面帮助我。:)


更新1:

我将配置更改为:

server {
    listen  80;
    listen  [::]:80;
    server_name  [DOMAIN];

    error_log   /var/log/[DOMAIN]_error.log warn;
    access_log  /var/log/[DOMAIN]_access.log;

    add_header Strict-Transport-Security "max-age=31536000; includeSubdomains;";

    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 /home/[AppName]/Public;
    }
}
不幸的是,我仍然得到这个:

2019/12/01 14:48:04 [error] 6801#6801: *1 connect() failed (111: Connection refused) while connecting to upstream, client: [IP], server: [DOMAIN], request: "GET /hello HTTP/1.1", upstream: "http://127.0.0.1:8080/hello", host: [DOMAIN]
更新2:


错误与此行有关:
proxy\u passhttp://127.0.0.1:8080/;

我不得不把它改成这样:
proxy\u passhttp://localhost:8080/;

似乎localhost是不一样的

现在我可以通过“vapor run”运行应用程序,并可以访问它。:)


非常感谢@imike的帮助

您可以尝试我的100%works生产配置,支持SSL和WebSocket

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;
    }
}
在配置的最后,您可以看到,公用文件夹nginx中的静态文件将直接返回,而无需运行Vapor应用程序

在config.swift文件中,您应该仅在macOS上使用FileMiddleware,因为在没有nginx的情况下测试应用程序,因为该中间件非常慢,所以我建议您将其放入编译器检查

#if os(macOS)
middlewares.use(FileMiddleware.self) // Serves files from `Public/` directory
#endif

您可以使用SSL和websockets支持尝试我的100%works生产配置

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;
    }
}
在配置的最后,您可以看到,公用文件夹nginx中的静态文件将直接返回,而无需运行Vapor应用程序

在config.swift文件中,您应该仅在macOS上使用FileMiddleware,因为在没有nginx的情况下测试应用程序,因为该中间件非常慢,所以我建议您将其放入编译器检查

#if os(macOS)
middlewares.use(FileMiddleware.self) // Serves files from `Public/` directory
#endif

错误与配置文件中的此行有关:
proxy\u passhttp://127.0.0.1:8080/;

我不得不把它改成这样:
proxy\u passhttp://localhost:8080/;

似乎localhost是不一样的

现在我可以通过“vapor run”运行应用程序,并可以访问它。:)


非常感谢@imike的帮助!他解决了

错误与配置文件中的此行有关:
proxy\u passhttp://127.0.0.1:8080/;

我不得不把它改成这样:
proxy\u passhttp://localhost:8080/;

似乎localhost是不一样的

现在我可以通过“vapor run”运行应用程序,并可以访问它。:)



非常感谢@imike的帮助!他解决了

你试过我的配置了吗?在这些测试期间,您的vapor应用程序是否正在运行?它是否从服务器启动时打印
http://127.0.0.1:8080
在控制台中?首先,我建议您使用--hostname 0.0.0.0参数运行vapor应用程序,并尝试像这样访问它,如果它可以工作,然后继续使用nginx我想localhost:8080和127.0.0.1:8080是不同的,因此,请尝试在nginx config中替换为localhost:8080,或者通过“swift run--hostname 127.0.0.1”启动您的应用程序,不要在0.0.0.0上启动您的应用程序,因为在这种情况下,它可能可以直接通过nginx访问,也可能被不好的人用来攻击您的应用程序。您从其他问题中尝试过我的配置吗?在这些测试期间,您的vapor应用程序是否正在运行?它是否从服务器启动时打印
http://127.0.0.1:8080
在控制台中?首先,我建议您使用--hostname 0.0.0.0参数运行vapor应用程序,并尝试像这样访问它,如果它可以工作,然后继续使用nginx我想localhost:8080和127.0.0.1:8080是不同的,因此,请尝试在nginx config中替换为localhost:8080,或者通过“swift run--hostname 127.0.0.1”启动您的应用程序,不要在0.0.0.0上启动您的应用程序,因为在这种情况下,可能可以直接访问nginx,也可能被不好的人用来攻击您的应用程序谢谢您的回答!我必须添加SSL证书才能工作吗?使用文件时,Nginx不会重新启动。我需要做任何特殊的编辑吗?至少你应该更改域名。如果您没有SSL,那么您应该将端口从443更改为80,并删除所有与SSL相关的线路。谢谢!我想我改变了与SSL相关的线路,现在nginx重新启动了。不幸的是,我得到了502。我更新了我的问题。你能再看一眼吗?谢谢你的回答!我必须添加SSL证书才能工作吗?使用文件时,Nginx不会重新启动。我需要做任何特殊的编辑吗?至少你应该更改域名。如果您没有SSL,那么您应该将端口从443更改为80,并删除所有与SSL相关的线路。谢谢!我想我改变了与SSL相关的线路,现在nginx重新启动了。不幸的是,我得到了502。我更新了我的问题。你能再看看吗?