Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rewrite - forward server IP to domain url nginx

I'd like to have the IP of my server be rewritten as a domain name url but I'm having the hardest time figuring out how to make this happen.

For example, when I enter 213.34.54.xxx in the browser, I'd like it to be rewritten as mydomain.com and NOT display the IP address.

My current configuration is as follows:

/etc/nginx/nginx.conf

user www-data;
worker_processes 2;
error_log  /var/log/nginx/error.log;
pid /var/run/nginx.pid;

events {
  worker_connections 1024;
}

http {
  include       /etc/nginx/mime.types;
  default_type  application/octet-stream;
  access_log /var/log/nginx/access.log;
  server_names_hash_bucket_size 64;
  sendfile        on;

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

/etc/nginx/sites-enabled/mydomain

upstream unicorn {
    server unix:/tmp/unicorn.mydomain.sock fail_timeout=0;
   }

    server {
      listen 80 default;
      server_name localhost;
      root /home/deployer/apps/mydomain/current/public;

      location ^~ /assets/ {
        gzip_static on;
        expires max;
        add_header Cache-Control public;
      }

      try_files $uri/index.html $uri @unicorn;
      location  / {
        proxy_set_header Host $http_host;
        proxy_set_header  X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://unicorn;
      } 

      error_page 500 502 503 504 /500.html;
      client_max_body_size 4G;
      keepalive_timeout 10;
     }

I've tried adding this to the server directive in mydomain configuration file:

rewrite ^ $scheme://mydomain.com$request_uri redirect;

but I get a TOO MANY REDIRECTS ERROR in my browsers.

At the very least, I'm able to prevent the IP address from being displayed by using this in the server directive:

if ($host !~* ^www\.) {
    rewrite ^(.*)$ http://www.$host$1 permanent;
   }

However, this is listed as one of the pitfalls on the nginx site :(

Any insights of what I might be doing wrong would be GREATLY appreciated!

Thanks!

like image 810
John Avatar asked Apr 17 '12 19:04

John


People also ask

How do I change my nginx URL?

NGINX Return directive The easiest and cleaner way to rewrite an URL can be done by using the return directive. The return directive must be declared in the server or location context by specifying the URL to be redirected.

What is return 301 in nginx?

Visitor–> Website Page–> Website is under maintenance. On the other hand, a permanent Nginx redirect informs the web browser that it should permanently link the old page or domain to a new location or domain. To map this change, the redirects response code 301 is used for designating the permanent movement of a page.


1 Answers

Actually the answer above does not work (at least for me). I suppose since the question has been raised the asker has found his solution, but since I searched on google and a lot of links go here, maybe this solution will help other people, simply add this to your conf file:

server {
        server_name 162.13.171.178;
        # you can add other server_name if you need other IPs
        # or domain names such as without the www

        add_header X-Frame-Options "SAMEORIGIN";

        return 301 $scheme://www.example.com$request_uri;
}
like image 155
Guillaume Arluison Avatar answered Sep 19 '22 03:09

Guillaume Arluison