Использование nginx для доступа в интернет через интранет

Я не знаю, правильно ли я поступаю, но вот что мне нужно сделать. У меня есть веб-сайт, который доступен в Интернете. Но у меня есть пользователи, которые имеют доступ только к интрасети. Я хочу создать прокси, чтобы эти пользователи могли получить доступ к этому сайту. Сейчас я настроил Nginx, где он прослушивает bproxy на aproxy.com и перенаправляет пользователя к любым аргументам.

Я также настроил брандмауэр, чтобы разрешить доступ только к IP-адресу 127.0.0.1.

Я использую proxy_pass http://$args, чтобы перенаправить пользователя на аргументы в www.aproxy.com/bproxy?www.somesite.com. Теперь, если аргументом является www.google.com, он перенаправляет пользователя на www.google.com/bproxy?www.somesite.com. Это, очевидно, приводит к ошибке, так как bproxy не является путем на некотором сайте. Мне бы хотелось, чтобы браузер продолжал показывать http://aproxy.com/bproxy?www.somesite.com, а пользователь - www.google.com.

Этого не произойдет, если я напрямую использую http://aproxy.com/?www.somesite.com. Теперь проблема, с которой я сталкиваюсь, заключается в том, что любой относительный путь в www.somesite.com, например /img/imagei.gif, становится aproxy.com/img/image1.gif вместо www.somesite.com/img/image1.gif.

Я не знаю, как поступить, и буду очень признателен за помощь.

1 ответ

Решение

Есть кое-что, о чем вы еще не подумали - даже если вы попадете на proxy.local / somesite.com, все ссылки все равно будут указывать на somesite.com. В Apache есть модуль для преодоления этой проблемы (который я никогда не использовал), а в NGinx - нет. Вы должны попробовать Squid, вы можете настроить ACL, которые ограничивают доступ к сайтам, и он поддерживается практически всем. Точно так же есть действительно старый Perl-скрипт с именем nph-proxy.cgi, который работает довольно хорошо.

Другие вопросы по тегам