Vagrant 和 NGINX 仅适用于 80 以外的端口

Posted

技术标签:

【中文标题】Vagrant 和 NGINX 仅适用于 80 以外的端口【英文标题】:Vagrant and NGINX only works on ports other than 80 【发布时间】:2015-09-30 21:32:36 【问题描述】:

出于本文的目的,我使用 Vagrant 来启动 nginx(通过 Docker,但我认为这并不重要)。

我的 Vagrant 如下所示:

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  #Assign Box and VM Properties
  config.vm.box = "ubuntu/trusty64"

  config.vm.provider "virtualbox" do |v|
    v.memory = 1024
    v.cpus = 2
  end

  # Network
  config.vm.network "forwarded_port", guest:80, host: 80  #--> DOESN'T WORK localhost
  config.vm.network "forwarded_port", guest:80, host:8391 #--> WORKS localhost:8391

  # Provision
  config.vm.provision :shell, inline: "sudo apt-get update"
  config.vm.provision :docker

end

目标是能够在 localhost 而不是 localhost:8391 上创建 NGINX

由于映射以及在 Vagrant 中运行 CURL,我知道 NGINX 正在监听 80。

【问题讨论】:

您可以使用vagrant up 命令的输出来编辑您的问题吗? 【参考方案1】:

您可以使用 setcap 为特定二进制文件的非 root 用户启用 1024 以下的端口。

这仅适用于 Linux,并且必须应用于 Vagrant 盒子,才能使用盒子内的端口 80,以及您的主机,才能使用主机上的端口 80。

您需要软件包 libcap2-bin,例如适当的:

sudo apt-get install libcap2-bin sudo setcap cap_net_bind_service=+ep /path/to/nginx-binary

之后,NGINX 被允许使用框内的 80 端口作为用户 vagrant。现在在您的主机上启用 Vagrant 设置。

sudo setcap cap_net_bind_service=+ep /path/to/vagrant-binary

【讨论】:

【参考方案2】:

一般来说,在使用 Vagrant 时,您不能绑定到主机上的 1024 或以下端口,除非您以 root 身份运行它。 (与其他应用一样,显然不建议以 root 身份运行 Vagrant。)

作为替代方案,如果您不需要专门连接到“localhost”,您可以尝试设置一个专用网络,以便您的 Vagrant 盒子有一个单独的 IP 地址。请参阅http://docs.vagrantup.com/v2/networking/private_network.html 了解更多信息。那应该可以让您连接到该 IP 上的端口 80。

【讨论】:

以上是关于Vagrant 和 NGINX 仅适用于 80 以外的端口的主要内容,如果未能解决你的问题,请参考以下文章

http.ListenAndServe 仅适用于本地主机?

仅针对 nginx 上的特定 url 使用 https 重定向

Vagrant 共享文件夹适用于工作目录,但仅此而已

css3 仅适用于谷歌

循环遍历数组对象以检查值匹配仅适用于第一次迭代,后续迭代失败

UIScrollView : UIEdgeInsets 仅适用于“顶部”和“左侧”