Как сделать скрытую переадресацию?

224
21 апреля 2017, 22:06

скажем у меня есть два доменных именни: one.com и two.com.

Также есть проект, на PHP, который хостится на сервере(NGINX) и доступен по следующим сылкам. http://my.server.com/**one*/ и http://my.server.com/**two*/.

Как мне сделать так, чтобы когда клиент в браузере задавал one.com, у него показывался контент из http://my.server.com/one/, а когда two.com, то показывался контент из http://my.server.com/two/ при этом в адрессе браузера продолжалось показываться one.com или two.com соответсвенно?

как такое сделать с помощью nginx?

Заранее спасибо.

#user  nobody; 
worker_processes  auto; 
worker_rlimit_nofile 2048; 
 
error_log  /var/log/nginx/error.log; 
#error_log  logs/error.log  notice; 
#error_log  logs/error.log  info; 
 
#pid        logs/nginx.pid; 
 
 
events { 
    worker_connections  2048; 
} 
 
 
http { 
    server_tokens off; 
    include       mime.types; 
    default_type  application/octet-stream; 
 
    log_format  main  '$http_x_forwarded_for - $remote_user [$time_local] "$request" ' 
                      '$status $body_bytes_sent "$http_referer" ' 
                      '"$http_user_agent" "$http_x_forwarded_for"'; 
 
    access_log  /var/log/nginx/access.log  main; 
 
    sendfile        on; 
    #tcp_nopush     on; 
 
    #keepalive_timeout  0; 
    keepalive_timeout  65; 
 
    #gzip  on; 
 
    # Websocket support 
    #upstream websocket { 
    #    server 127.0.0.1:<PORT>; 
    #} 
 
    server { 
        listen       80; 
        server_name  localhost; 
 
        #charset koi8-r; 
 
        #access_log  logs/host.access.log  main; 
	    include /etc/nginx/aliases.conf; 
 
        #location /ws { 
        #    proxy_pass http://websocket; 
        #    proxy_http_version 1.1; 
        #    proxy_set_header Upgrade $http_upgrade; 
        #    proxy_set_header Connection "Upgrade"; 
        #} 
 
 
        location / { 
            root   /var/www/webroot/ROOT; 
            index  index.html index.htm index.php; 
 
    	    location ~ \.php$ { 
    	    	location ~ /\. { deny all; access_log off; log_not_found off; } 
	    	include /etc/nginx/fastcgi_params; 
	        fastcgi_pass 127.0.0.1:9000; 
		fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; 
		fastcgi_param DOCUMENT_ROOT $realpath_root; 
		fastcgi_param PATH_INFO $fastcgi_script_name; 
    	    } 
 
        } 
        index  index.php index.html index.htm; 
 
        #error_page  404              /404.html; 
 
        # redirect server error pages to the static page /50x.html 
        # 
        error_page   500 502 503 504  /50x.html; 
        location = /50x.html { 
            root   html; 
        } 
 
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80 
        # 
        #location ~ \.php$ { 
        #    proxy_pass   http://127.0.0.1; 
        #} 
	location ~ /\. { deny all; access_log off; log_not_found off; } 
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 
        # 
        #location ~ \.php$ { 
        #    root           html; 
        #    fastcgi_pass   127.0.0.1:9000; 
        #    fastcgi_index  index.php; 
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name; 
        #    include        fastcgi_params; 
        #} 
 
        # deny access to .htaccess files, if Apache's document root 
        # concurs with nginx's one 
        # 
        #location ~ /\.ht { 
        #    deny  all; 
        #} 
	location ~ \.php$ { 
		location ~ /\. { deny all; access_log off; log_not_found off; } 
        	include /etc/nginx/fastcgi_params; 
	        fastcgi_pass 127.0.0.1:9000; 
        	fastcgi_param SCRIPT_FILENAME /var/www/webroot$fastcgi_script_name; 
	        fastcgi_param PATH_INFO $fastcgi_script_name; 
        	fastcgi_param DOCUMENT_ROOT /var/www/webroot; 
        } 
 
    } 
 
include /etc/nginx/conf.d/*.conf; 
 
}

Answer 1

во-первых, dns-имена one.com и two.com должны резолвиться в ip-адрес вашего сервера.

во-вторых, вам надо добавить две секции server {...} в конфигурацию nginx.

  1. допустим, сейчас у вас есть примерно такая секция (показана только существенная информация):

    server {
      server_name my.server.com;
      ...
      root /путь/к/каталогу;
      ...
    }
    

    это в случае, если код сайтов находится в каталогах /путь/к/каталогу/one и /путь/к/каталогу/two.

    вам надо дважды скопировать эту секцию и исправить директивы server_name и root, чтобы получить примерно следующее:

    server {
      server_name my.server.com;
      ...
      root /путь/к/каталогу;
      ...
    }
    server {
      server_name one.com;
      ...
      root /путь/к/каталогу/one;
      ...
    }
    server {
      server_name two.com;
      ...
      root /путь/к/каталогу/two;
      ...
    }
    

    обновление: директива root может находиться и внутри секции location / {...}, как в вашем вопросе. это не меняет сути — копируйте секцию server {...} «как есть», не меняя расположение директивы root (т.е., оставив её внутри секции location / {...}), но обязательно допишите /one и /two в конце директив root, как в примере выше.

  2. если же каталоги one и two находятся в совсем разных местах, то, вероятно, секция выглядит примерно так:

    server {
      server_name my.server.com;
      ...
      location /one {
        root /один/путь;
        ...
      }
      location /two {
        root /другой/путь;
        ...
      }
      ...
    }
    

    тогда вам надо опять-таки сделать две копии секции server, удалив ненужные секции location {...}:

    server {
      server_name my.server.com;
      ...
    }
    server {
      server_name one.com;
      ...
      location /one {
        root /один/путь;
        ...
      }
      ...
    }
    server {
      server_name two.com;
      ...
      location /two {
        root /другой/путь;
        ...
      }
      ...
    }
    

    и затем исправив /one и /two на /, а к директивам root добавить эти пути:

    server {
      server_name my.server.com;
      ...
    }
    server {
      server_name one.com;
      ...
      location / {
        root /один/путь/one;
        ...
      }
      ...
    }
    server {
      server_name two.com;
      ...
      location / {
        root /другой/путь/two;
        ...
      }
      ...
    }
    
READ ALSO
При аплоде картинки microtime дает разные значения

При аплоде картинки microtime дает разные значения

Подскажите нужно сделать имя файла уникальным с помощью microtime и делая

213
Dynamic php pagination ajax

Dynamic php pagination ajax

Нужно к этому коду адаптировать pagination переключение с помощью ajax, вот пример и код:

211
Проблема с шаблоном главной страницы в WP

Проблема с шаблоном главной страницы в WP

Создал шаблон статической страницыПроверяю - PHP скрипты в ней отрабатывают

238
Работа с каталогами и файлами по символьной ссылке в PHP

Работа с каталогами и файлами по символьной ссылке в PHP

Имеется скрипт написанный на PHP 56 Имеется примонтированный к серверу на базе Debian 8 дополнительный диск, на котором лежат фотографии и xml файлы

371