vagrant-reverse-proxy 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +14 -0
- data/lib/vagrant-reverse-proxy/action/write_nginx_config.rb +34 -37
- data/lib/vagrant-reverse-proxy/config.rb +9 -1
- data/lib/vagrant-reverse-proxy/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ad23d444baedd4df858c5720a94e983e31401b9f
|
4
|
+
data.tar.gz: 1049c3a3ab95b7b4fcd517f76182fc0a717e4e5b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2e0fe83f8e191a2193e56a908c7faf00cf0d0c4e957706558d8bf39b3166dcbba3fea5ab3a9e9884a68f995abb7e5841dabb2df5aea7340707b35127bd096e83
|
7
|
+
data.tar.gz: e860d8501191d327a1200e36e2e920775039ea2685a96ef9b48946a923bc34e55d228e5145fd2fb93152a704db11bae889da3a76051fa3cfecb69c43c6b86eac
|
data/README.md
CHANGED
@@ -72,6 +72,11 @@ an array:
|
|
72
72
|
As you can see, this allows you to define which port to connect to
|
73
73
|
instead of the default port (which is port 80).
|
74
74
|
|
75
|
+
### Specifying the NGINX configuration file path
|
76
|
+
|
77
|
+
If you want to change the location of the managed nginx configuration file, set the `config.reverse_proxy.nginx_config_file` value to a path on your host machine in the Vagrantfile configuration:
|
78
|
+
|
79
|
+
config.reverse_proxy.nginx_config_file = '/usr/local/etc/nginx/vagrant-proxy-config'
|
75
80
|
|
76
81
|
## Adding proxy support to your application
|
77
82
|
|
@@ -98,3 +103,12 @@ If you're using Symfony, just use `setTrustedProxies()` on your
|
|
98
103
|
`Request` object, and Symfony takes care of the rest. Note that
|
99
104
|
`X-Base-Url` is not supported by either framework, so you'll need to
|
100
105
|
add a bit of custom code there if you need to override the base URL.
|
106
|
+
|
107
|
+
|
108
|
+
## Changelog
|
109
|
+
|
110
|
+
- 0.3 Allow overriding the location of the NGINX configuration file
|
111
|
+
(thanks to Sam Stevens). Support multiple VMs in a single Vagrant
|
112
|
+
config (suggested by Nicholas Alipaz).
|
113
|
+
- 0.2 Support for proxying of multiple ports in `vhosts` config.
|
114
|
+
- 0.1 First version
|
@@ -4,42 +4,51 @@ module VagrantPlugins
|
|
4
4
|
class WriteNginxConfig
|
5
5
|
def initialize(app, env, action)
|
6
6
|
@app = app
|
7
|
-
@global_env = env[:machine].env
|
8
|
-
@provider = env[:machine].provider_name
|
9
|
-
@config = @global_env.vagrantfile.config
|
10
7
|
@action = action
|
11
8
|
end
|
12
9
|
|
13
10
|
def call(env)
|
14
11
|
@app.call(env)
|
15
12
|
|
16
|
-
|
13
|
+
# Does this make much sense? What if we disable it later
|
14
|
+
# for one specific machine? Then, the config should still
|
15
|
+
# be removed.
|
16
|
+
return unless env[:machine].config.reverse_proxy.enabled?
|
17
17
|
|
18
18
|
# Determine temp file and target file
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
nginx_config_file = env[:machine].config.reverse_proxy.nginx_config_file || '/etc/nginx/vagrant-proxy-config'
|
20
|
+
|
21
|
+
# Get the directory of the config file
|
22
|
+
nginx_config_dir = File.dirname(nginx_config_file)
|
23
|
+
|
24
|
+
unless File.directory?(nginx_config_dir)
|
25
|
+
env[:ui].error("Could not update nginx configuration: directory '#{nginx_config_dir}' does not exist. Continuing without proxy...")
|
22
26
|
return
|
23
27
|
end
|
24
|
-
|
25
|
-
tmp_file =
|
28
|
+
|
29
|
+
tmp_file = env[:machine].env.tmp_path.join('nginx.vagrant-proxies')
|
26
30
|
|
27
31
|
env[:ui].info('Updating nginx configuration. Administrator privileges will be required...')
|
28
32
|
|
29
|
-
|
30
|
-
|
33
|
+
sm = start_marker(env[:machine])
|
34
|
+
em = end_marker(env[:machine])
|
35
|
+
|
36
|
+
# This code is so stupid: We write a tmp file with the
|
37
|
+
# current config, filtered to exclude this machine. Later,
|
38
|
+
# we put this machine's config back in. It might have
|
39
|
+
# changed, and might not have been present originally.
|
31
40
|
File.open(tmp_file, 'w') do |new|
|
32
41
|
begin
|
33
|
-
File.open(
|
34
|
-
|
35
|
-
em = machines.map {|m| end_marker(m) }
|
36
|
-
|
42
|
+
File.open(nginx_config_file, 'r') do |old|
|
43
|
+
# First, remove old entries for this machine.
|
37
44
|
while ln = old.gets() do
|
38
|
-
if sm
|
39
|
-
until
|
45
|
+
if sm == ln.chomp
|
46
|
+
# Skip lines until we find EOF or end marker
|
47
|
+
until !ln || em == ln.chomp do
|
40
48
|
ln = old.gets()
|
41
49
|
end
|
42
50
|
else
|
51
|
+
# Keep lines for other machines.
|
43
52
|
new.puts(ln)
|
44
53
|
end
|
45
54
|
end
|
@@ -49,20 +58,22 @@ module VagrantPlugins
|
|
49
58
|
# we'll create it soon enough.
|
50
59
|
end
|
51
60
|
|
52
|
-
if @action == :add
|
53
|
-
|
54
|
-
|
61
|
+
if @action == :add # Removal is already (always) done above
|
62
|
+
# Write the config for this machine
|
63
|
+
if env[:machine].config.reverse_proxy.enabled?
|
64
|
+
new.write(sm+"\n"+server_block(env[:machine])+em+"\n")
|
55
65
|
end
|
56
66
|
end
|
57
67
|
end
|
58
68
|
|
59
|
-
|
69
|
+
# Finally, copy tmp config to actual config and reload nginx
|
70
|
+
Kernel.system('sudo', 'cp', tmp_file.to_s, nginx_config_file)
|
60
71
|
Kernel.system('sudo', 'service', 'nginx', 'reload')
|
61
72
|
end
|
62
73
|
|
63
74
|
def server_block(machine)
|
64
|
-
if
|
65
|
-
vhosts =
|
75
|
+
if machine.config.reverse_proxy.vhosts
|
76
|
+
vhosts = machine.config.reverse_proxy.vhosts
|
66
77
|
else
|
67
78
|
host = machine.config.vm.hostname || machine.name
|
68
79
|
vhosts = {host => host}
|
@@ -95,20 +106,6 @@ EOF
|
|
95
106
|
"# END #{m.id} #"
|
96
107
|
end
|
97
108
|
|
98
|
-
# Machine-finding code stolen from vagrant-hostmanager :)
|
99
|
-
def get_machines()
|
100
|
-
# Collect only machines that exist for the current provider
|
101
|
-
@global_env.active_machines.collect do |name, provider|
|
102
|
-
if provider == @provider
|
103
|
-
begin
|
104
|
-
@global_env.machine(name, @provider)
|
105
|
-
rescue Vagrant::Errors::MachineNotFound
|
106
|
-
nil #ignore
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end.compact
|
110
|
-
end
|
111
|
-
|
112
109
|
# Also from vagrant-hostmanager
|
113
110
|
def get_ip_address(machine)
|
114
111
|
ip = nil
|
@@ -2,12 +2,13 @@ module VagrantPlugins
|
|
2
2
|
module ReverseProxy
|
3
3
|
class Plugin
|
4
4
|
class Config < Vagrant.plugin(2, :config)
|
5
|
-
attr_accessor :enabled, :vhosts
|
5
|
+
attr_accessor :enabled, :vhosts, :nginx_config_file
|
6
6
|
alias_method :enabled?, :enabled
|
7
7
|
|
8
8
|
def initialize
|
9
9
|
@enabled = UNSET_VALUE
|
10
10
|
@vhosts = UNSET_VALUE
|
11
|
+
@nginx_config_file = UNSET_VALUE
|
11
12
|
end
|
12
13
|
|
13
14
|
def finalize!
|
@@ -29,6 +30,9 @@ module VagrantPlugins
|
|
29
30
|
end
|
30
31
|
end
|
31
32
|
end
|
33
|
+
if @nginx_config_file == UNSET_VALUE
|
34
|
+
@nginx_config_file = nil
|
35
|
+
end
|
32
36
|
end
|
33
37
|
|
34
38
|
def validate(machine)
|
@@ -61,6 +65,10 @@ module VagrantPlugins
|
|
61
65
|
errors << 'vhosts must be an array of hostnames, a string=>string hash or nil'
|
62
66
|
end
|
63
67
|
|
68
|
+
unless @nginx_config_file.instance_of?(String) || @nginx_config_file == nil || @nginx_config_file == UNSET_VALUE
|
69
|
+
errors << 'nginx_config_file must be a string'
|
70
|
+
end
|
71
|
+
|
64
72
|
{ 'Reverse proxy configuration' => errors.compact }
|
65
73
|
end
|
66
74
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant-reverse-proxy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Bex
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-11-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|