Nginx Frage

Unifex

New Member
Angenommen man hat mehrere Domains auf einer IP gehostet.
Wie kann man bei Nginx bestimmen, welcher Vhost aufgerufen wird, wenn man nur die IP Adresse eingibt?
 
So ganz klar ist es mir noch nicht.
Hier mal eine von vielen Vconf Files:

Code:
server {
   	listen 144.xx.xxx.xxx:80;
    server_name lamer.net;
	  return       301 http://www.lamer.net$request_uri;
}
server {
   	listen 144.xx.xxx.xxx:80;	
	server_name www.lamer.net;
	root /var/www/lamer;
	index index.php index.html index.htm;
  access_log  /var/log/nginx/lamer.net.access.log;
	error_log /var/log/nginx/lamer.net.error.log;
	# Make site accessible from http://localhost/
	#server_name localhost;

 if ($allowed_country = no) {
 return 444;
 }

 location ~/admin\.php$ {
                        auth_basic "Administrator Login";
                        auth_basic_user_file /xxx/xxx/htpasswd;
                        root /var/www/lamer;
                        try_files $uri =404;
                        fastcgi_pass unix:/var/run/php5-fpm.sock;
                        fastcgi_index index.php;
                        fastcgi_read_timeout 300;
                        fastcgi_param  HTTP_SCHEME https;
                        include fastcgi_params;
                } 

    location / {
        try_files $uri $uri/ /index.php?$uri&$args;
    }

# Media: images, icons, video, audio, HTC
        location ~* \.(?:jpg|jpeg|gif|png|ico|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
            expires 1M;
            access_log off;
            add_header Cache-Control "public";
    }
    
# CSS and Javascript
        location ~* \.(?:css|js)$ {
            expires 1y;
            access_log off;
            add_header Cache-Control "public";
    }


    location ~ /(internal_data|library) {
         internal;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_read_timeout 300;
        fastcgi_send_timeout 180;
        fastcgi_connect_timeout 60;
        fastcgi_ignore_client_abort off;
        fastcgi_intercept_errors on;
    }   
}

Würde dann so eine Conf das Problem schon lösen:

Code:
server {
   	listen 144.xx.xxx.xxx:80;
    server_name lamer.net;
	  return       301 http://www.lamer.net$request_uri;
}
server {
   	listen 144.xx.xxx.xxx:80;	default_server;
	server_name www.lamer.net;
	root /var/www/lamer;
	index index.php index.html index.htm;
  access_log  /var/log/nginx/lamer.net.access.log;
	error_log /var/log/nginx/lamer.net.error.log;
	# Make site accessible from http://localhost/
	#server_name localhost;

 if ($allowed_country = no) {
 return 444;
 }

 location ~/admin\.php$ {
                        auth_basic "Administrator Login";
                        auth_basic_user_file /xxx/xxx/htpasswd;
                        root /var/www/lamer;
                        try_files $uri =404;
                        fastcgi_pass unix:/var/run/php5-fpm.sock;
                        fastcgi_index index.php;
                        fastcgi_read_timeout 300;
                        fastcgi_param  HTTP_SCHEME https;
                        include fastcgi_params;
                } 

    location / {
        try_files $uri $uri/ /index.php?$uri&$args;
    }

# Media: images, icons, video, audio, HTC
        location ~* \.(?:jpg|jpeg|gif|png|ico|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
            expires 1M;
            access_log off;
            add_header Cache-Control "public";
    }
    
# CSS and Javascript
        location ~* \.(?:css|js)$ {
            expires 1y;
            access_log off;
            add_header Cache-Control "public";
    }


    location ~ /(internal_data|library) {
         internal;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_read_timeout 300;
        fastcgi_send_timeout 180;
        fastcgi_connect_timeout 60;
        fastcgi_ignore_client_abort off;
        fastcgi_intercept_errors on;
    }   
}

Oder doch die Ip in eine eigene Conf. habe ich glaube ich früher bei Apache auch so gemacht.

Würde dann nicht eine Conf schon so reichen? :
Code:
server {
   	listen 144.xx.xxx.xxx:80;
    server_name 144.xx.xxx.xxx;
	  return       301 http://www.lamer.net$request_uri;
}
 
Ok, du möchtest offensichtlich einen Redirect von IP auf www.lamer.net haben, korrekt? Das geht am einfachsten, wenn du beim ersten VHost (lamer.net) bei server_name einfach noch die IP mit rein nimmst.

Code:
server {
    listen 144.xx.xxx.xxx:80;
    server_name lamer.net 144.xx.xxx.xxx; 
    return       301 http://www.lamer.net$request_uri;
}
 
Aha, das bedeutet also immer bei dem VHost kann man die IP Adresse dahinter schreiben, wo man möchte dass bei Aufruf der IP ( nicht Domain) die entsprechende Domain geladen wird.

Logischerweise nur einmal pro IP ist so ein Eintrag dann möglich.

Habe ich das so richtig verstanden?
 
Aha, das bedeutet also immer bei dem VHost kann man die IP Adresse dahinter schreiben, wo man möchte dass bei Aufruf der IP ( nicht Domain) die entsprechende Domain geladen wird.
Du kannst für einen vHost in NGINX (mehr oder weniger) beliebig viele IPs / Domains setzen. Also solange diese auch auf den Server zeigen natürlich =)
 
Back
Top