【问题标题】:Port require, dokku digitaloceanPort require, dokku digitalocean
【发布时间】:2016-11-08 18:41:37
【问题描述】:

我使用 dokku 图像创建了一个 Droplet 并部署了一个 Rails 应用程序。一切都“正常”,除了我需要指定访问应用程序的端口(例如 209.107.150.99:66445 或 example.com:66445)。

当我 ssh 应用程序并转到 /home/dokku/my-app/nginx.conf 时,我得到了这个:

server {
 listen      [::]:22445;
 listen      22445;

 access_log  /var/log/nginx/<my-app>-access.log;
 error_log   /var/log/nginx/<my-app>-error.log;

 location    / {

   gzip on;
   gzip_min_length  1100;
   gzip_buffers  4 32k;
   gzip_types    text/css text/javascript text/xml text/plain text/x-component$
  gzip_vary on;
  gzip_comp_level  6;

  proxy_pass  http://<my-app>-5000;
  proxy_http_version 1.1;
      gzip on;
  gzip_min_length  1100;
  gzip_buffers  4 32k;
  gzip_types    text/css text/javascript text/xml text/plain text/x-component$
  gzip_vary on;
  gzip_comp_level  6;

  proxy_pass  http://<my-app>-5000;
  proxy_http_version 1.1;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection "upgrade";
  proxy_set_header Host $http_host;
  proxy_set_header X-Forwarded-Proto $scheme;
  proxy_set_header X-Forwarded-For $remote_addr;
  proxy_set_header X-Forwarded-Port $server_port;
  proxy_set_header X-Request-Start $msec;
}
 include /home/dokku/<my-app>/nginx.conf.d/*.conf;

在这个文件中,如果我将“listen”更改为 80,则没有任何反应,当我重新启动或重建应用程序时,它会更改回 66445。

我不知道该怎么办,在谷歌上找不到太多与此相关的信息。也许我在部署时遗漏了一些东西?我关注了这个guide,除了插件部分。

编辑:

/var/log/nginx/中有四个日志文件。

access.log:

<my-ip> - - [06/Jul/2016:11:29:30 -0400] "POST /<my-ip> - - [06/Jul/2016:11:29:25 -0400] "GET / HTTP/1.1" 200 3231 "-" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36"
<my-ip> - - [06/Jul/2016:11:29:26 -0400] "GET /favicon.ico HTTP/1.1" 200 3231 "http://<app-ip>/" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36"
<my-ip> - - [06/Jul/2016:11:29:30 -0400] "POST /setup HTTP/1.1" 200 27 "http://<app-ip>/" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36"

myApp-access.log:

<my-ip> - - [06/Jul/2016:13:12:44 -0400] "GET /payments/count_new_orders?_=1467823083139 HTTP/1.1" 200 54 "http://<app-ip>:<port>$/" "Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.97 Safari/537.36"

error.log 和 myApp-error.log 为空。

【问题讨论】:

    标签: ruby-on-rails nginx digital-ocean dokku


    【解决方案1】:

    您可以使用的最大端口号是65535。原因在于大多数(全部?)tcp 堆栈实现端口是无符号 16 位整数。

    更改您的侦听配置以使用较低的端口,它应该可以工作:

    listen      [::]:65445;
    listen      65445;
    

    【讨论】:

    • 我在示例中将其更改为随机数,不是文件中出现的真实端口号,但我将更改,以免人们混淆,我的错。
    【解决方案2】:

    你可以为你的应用设置一个静态端口,设置一个环境变量

    $ dokku config:set app_name DOKKU_NGINX_PORT=1234
    

    那么每次部署应用程序时,如果您没有域,您将拥有相同的 ip:port 组合

    您可以转到 ip:1234 并始终访问应用程序,端口将始终是您在该变量中设置的端口

    【讨论】:

    • 如果我将变量设置为80,那么我只能通过ip或域名访问应用程序吗?。 (例如 example.com 而不是 example.com:)。我读到,当您使用不包含端口的 URL 时,您的浏览器假定它是端口 80。
    • 我没有对此进行测试,但是是的,当我只有一个带有域的应用程序时,我会转到该域并打开唯一的应用程序。但没有用ip测试过。如果您设置了域,则可以毫无问题地访问该域。您可以将主域添加到应用程序中,并且也可以使用。使用 dokku 域添加 app_name domain.com
    • 在 dokku config:set app_name DOKKU_NGINX_PORT=80 之后,应用程序单独重启,但仍然有另一个端口。应用部署:http://:22445.
    • 先用另一个端口试试看能不能用另一个端口,理论上80是给nginx的
    【解决方案3】:

    在数字海洋的仪表板中,您可以添加域,但您还需要 ssh 应用程序并执行此操作:

    dokku domains:add appName example.com
    

    现在不用指定端口,直接输入域名或ip即可(如209.107.150.99或example.com)

    【讨论】:

      猜你喜欢
      • 2020-04-10
      • 1970-01-01
      • 1970-01-01
      • 2015-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多