LINUX.ORG.RU
ФорумAdmin

Виртуальные хосты nginx только для vpn клиентов

 , ,


0

2

На сервере CentOS6.5 стоит nginx без apache. Поднят VPN с этим сервером. На сервере настроены виртуальные хосты nginx. Хочется чтобы эти виртуальные хосты site1 и site2 были доступны только для клиентов VPN. Типа http://192.168.87.1/site1 или http://192.168.87.1/site2. 192.168.87.1 - адрес сервера в сети vpn. site1 - помеченный как default-server работает, а второй нет. Подскажите пожалуйста, кто сталкивался с подобным, куда копать. Если нужно больше информации - добавлю.


Ответ на: комментарий от zgen

client-openvpn.conf

client
dev tun
proto tcp
remote X.X.X.X 1194
resolv-retry infinite
nobind
persist-key
persist-tun

ca /home/zyke/.openvpn/ca.crt
cert /home/zyke/.openvpn/zyke.crt
key /home/zyke/.openvpn/zyke.key

comp-lzo
verb 3

log-append /var/log/openvpn/openvpn_client.log
status /var/log/openvpn/status_client.log

nginx.conf

user  nginx;
worker_processes 4;
pid /var/run/nginx.pid;

events {
worker_connections 768;
}

http {
charset utf-8;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

gzip on;
gzip_disable "msie6";

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}

nginx - default

server {
  listen 80 default_server;
  
  access_log /var/log/nginx/default.access.log;
  error_log /var/log/nginx/default.error.log;
    
  root /usr/share/nginx/html;
  index index.html index.htm;
  server_name localhost;
            
  location / { try_files $uri $uri/ =404; }
                                            
  error_page 404 /404.html;
                                              
  error_page 500 502 503 504 /50x.html;
  location = /50x.html { root /usr/share/nginx/html; }
                                                          
  location ~ \.php$ {
  fastcgi_split_path_info ^(.+\.php)(/.+)$;
  fastcgi_pass 127.0.0.1:9000;
 
  fastcgi_index index.php;
  fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
  include fastcgi_params;
 }
}

nginx - site1

server {
  listen 80;
  
  access_log /var/log/nginx/site1.access.log;
  error_log /var/log/nginx/site1.error.log;
    
  root /var/www/site1;
  index index.html index.htm;
  server_name site1;
            
  location / { try_files $uri $uri/ =404; }
                                            
  error_page 404 /404.html;
                                              
  error_page 500 502 503 504 /50x.html;
  location = /50x.html { root /usr/share/nginx/html; }
                                                          
  location ~ \.php$ {
  fastcgi_split_path_info ^(.+\.php)(/.+)$;
  fastcgi_pass 127.0.0.1:9000;
 
  fastcgi_index index.php;
  fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
  include fastcgi_params;
 }
}

zyke ()

Виртуальные хосты отделяются друг от друга dns-именами, по ip вы получите всегда только какой-то один дефолтный.

Вот смотрите, у вас указаны server_name site1 и server_name site2, это значит, что nginx ждёт, что к нему обратятся по какому-то ip и в запросе будет заголовок Host: site1 (или site2) - смотрите http://tools.ietf.org/html/rfc2616#section-14.23

Ну и для решения вашей задачи можно применить кучу методов, начиная с того, чтобы научить nginx слушать только на том ip, который является концом VPN-туннеля, заканчивая использованием http access модуля (http://nginx.org/ru/docs/http/ngx_http_access_module.html)

undertaker ★★ ()
Ответ на: комментарий от undertaker

И добавление к решению: оба описанных варианта решения предполагают, что виртуальный хост будет всего один (= без виртуального хостинга). Можно ещё озаботиться DNS-ом (хотя бы в /etc/hosts-ипостаси) и тогда городить полноценные виртуальные хосты, но думаю, оно вам не надо.

undertaker ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.