Làm cách nào để tôi dễ dàng di chuyển DNS của máy chủ web từ địa chỉ IP này sang địa chỉ IP khác?


8

Tôi hiện có một tên miền được đăng ký cho một máy chủ Linux / Apache mà tôi sẽ thay thế bằng một tên miền khác trên một địa chỉ IP mới.

Di chuyển dữ liệu sẽ tương đối nhanh chóng và sự gián đoạn 5 phút trong quá trình đó là chấp nhận được.

Bản ghi DNS có TTL từ 6-12 giờ rõ ràng, mà tôi không thể tăng tốc.

Những hậu quả có thể có của sự thay đổi này là gì? Có lẽ người dùng vẫn đang tìm kiếm địa chỉ cũ sẽ tiếp tục truy cập vào máy chủ cũ, trong khi người dùng bộ nhớ cache dns đã hết hạn hoặc trống sẽ thấy tên miền mới.

Có thể thực hiện một số loại chuyển hướng từ máy chủ cũ (với Apache hoặc iptables) sang IP mới không? Máy chủ cũ có thể tiếp tục chạy miễn là cần thiết.


Tôi đã sử dụng rinetd chung chung hơn một vhost cụ thể, nhưng hoạt động tuyệt vời nếu bạn thay thế toàn bộ máy chủ, hoặc, nói, chuyển tất cả nội dung web sang máy chủ khác. Chỉ cần đồng bộ hóa máy chủ mới, thiết lập rinetd, thay đổi DNS. Trong 48 giờ tắt máy chủ cũ (hoặc dịch vụ của nó).
artfulrobot

Câu trả lời:


5

Bạn có thể sử dụng Reverse Proxy trên máy chủ web cũ. Nó có thể là một chút công việc để thiết lập, nhưng chỉ cần ITS DNS được cập nhật, bạn sẽ ổn.

Điều gì sẽ xảy ra là:

  1. Máy chủ web cũ được cấu hình là Reverse Proxy
  2. Chuyển đổi DNS
  3. Máy chủ web mới phục vụ lượt truy cập từ các bản ghi DNS cập nhật
  4. Web cũ khi bị tấn công, chuyển yêu cầu đến đúng DNS và sau đó xuất nguyên văn nội dung.

Nếu bạn đang chạy Apache, hãy xem mod_proxy. Nếu bạn đang chạy IIS, hãy xem ISAPI Rewrite để có được loại chức năng này.

(lưu ý rằng DNS trên máy chủ web cũ cần được cập nhật nếu bạn muốn proxy bằng tên miền. Nếu không, hãy ủy quyền trực tiếp đến địa chỉ IP và đảm bảo rằng máy chủ đang nghe trên IP mà không có tên máy chủ)


1
Để đảm bảo máy chủ web cũ được cập nhật trên DNS mới. Thêm bản ghi vào / etc / hosts.
Matthew Scragg

@MatthewScragg Bạn có thể cung cấp thêm một số thông tin liên quan đến điều đó? Các bước và kết quả ..
Birla

1
@Birla Trên máy chủ web cũ, thêm vào /etc/hosts 123.456.789.12 my.domain.comĐiều này sẽ chỉ cho máy chủ web cũ của bạn biết địa chỉ được cập nhật. Khi khách hàng truy cập máy chủ web cũ (vì họ chưa cập nhật DNS), máy chủ web có thể ủy quyền yêu cầu bằng tên miền. Tôi không sử dụng Apache nhưng đây là một ví dụ Nginx: gist.github.com/scragg0x/738f144b33d17ef763d1
Matthew Scragg

11

Công ty của tôi chỉ làm điều này với một số trang web lớn. Thủ tục cơ bản chúng tôi tuân theo là:

  1. Hạ thấp tên miền càng nhiều càng tốt. Làm điều này trước ít nhất là nhiều thời gian như TTL hiện tại.
  2. Thiết lập trang Web trên máy chủ mới chính xác như cách bạn muốn "sản phẩm cuối cùng" trở thành
  3. Thêm một tên bí danh vào trang web trên máy chủ mới, chẳng hạn như www2.domain.com hoặc www-new.domain.com. Với Apache, bạn sẽ sử dụng lệnh ServerAlias . Nếu trang web có bất kỳ mã động nào (PHP, mod_perl, RubyOnRails, v.v.), hãy chắc chắn rằng trang web sẽ hoạt động và phản hồi chính xác với tên mới này.
  4. Tại thời điểm cắt, thiết lập chuyển hướng trên máy chủ cũ trỏ đến máy chủ mới
  5. Thay đổi DNS cho www để chuyển sang IP mới.

Đối với Apache, có lẽ bạn nên sử dụng mod_rewrite cho chuyển hướng để bạn có thể bảo vệ các URI được khách hàng yêu cầu. Một cách thực hiện đơn giản sẽ là:

# old server
<VirtualHost 1.1.1.1:80>
    ServerName www.domain.com
    RewriteEngine on
    RewriteRule ^(.*)$ http://www-new.domain.com$1 [L]
</VirtualHost>

# new server
<VirtualHost 1.1.1.2:80>
    ServerName www.domain.com
    ServerAlias www-new.domain.com
</VirtualHost>

Điều này sẽ thực hiện chuyển hướng tạm thời 302 cho www.domain.com/anything đến www-new.domain.com/anything. Bạn muốn nó là tạm thời bởi vì bạn có thể muốn các công cụ tìm kiếm chỉ lập chỉ mục www.domain.com, chứ không phải www-new.domain.com.

Khi thay đổi DNS cho www.domain.com đã lan truyền đến sự hài lòng của bạn, bạn có thể kết xuất hoàn toàn www-new hoặc nhẹ nhàng giúp bất kỳ ai sử dụng nó trở lại www với một chuyển hướng khác. Nó gần như là quá trình tương tự như trên; thiết lập máy chủ cũ để xử lý www-new, thay đổi DNS cho www-new để trỏ đến máy chủ cũ và thiết lập chuyển hướng trên máy chủ cũ gửi lưu lượng truy cập www-new đến www:

# old server
<VirtualHost 1.1.1.1:80>
   ServerName www-new.domain.com
   RewriteEngine on
   RewriteRule ^(.*)$ http://www.domain.com$1 [R=301,L]
</VirtualHost>

# new server
<VirtualHost 1.1.1.2:80>
    ServerName www.domain.com
    # ServerAlias removed, no longer needed
</VirtualHost>

Lần này bạn muốn thực hiện chuyển hướng 301 vĩnh viễn, một lần nữa để tìm ra các trình thu thập thông tin của công cụ tìm kiếm rằng www.domain.com là trang web bạn muốn họ lập chỉ mục.


4

Ok, dựa trên những gì @Fudeeker khuyên dùng, tôi đã thiết lập cấu hình sau trên máy chủ Apache cũ để chuyển tiếp yêu cầu lên máy chủ mới:

<VirtualHost *>
  UseCanonicalName Off
  ServerAdmin  me@domain.com
  ServerName domain.com
  DocumentRoot /var/www/

  ProxyRequests Off

  <Proxy *>
    Order deny,allow
    Allow from all
  </Proxy>

  ProxyPass / http://domain.com/
  ProxyPassReverse / http://domain.com/
</VirtualHost>

Để đảm bảo máy chủ cũ có địa chỉ chính xác, tôi đặt một mục vào /etc/hosts:

1.2.3.4 domain.com

Tôi cũng đã phải kích hoạt Apache mod_proxymod_proxy_httpcác mô-đun và tải lại cấu hình:

a2enmod proxy
a2enmod proxy_http
/etc/init.d/apache force-reload

Đẹp. Làm thế nào để xử lý các tên miền phụ tùy ý, mặc dù?
Ekevoo

4

Đó là một chủ đề cũ nhưng có lẽ nó sẽ giúp được ai đó:

Ngoài câu trả lời của Mark Henderson (mod_proxy) HOẶC James Sneeringer (chuyển hướng 302.301 sang tên miền phụ mới), một điều nữa có thể được thêm vào về đồng bộ hóa cơ sở dữ liệu khi di chuyển các ứng dụng lớn.

Nếu dự án web của bạn sử dụng cơ sở dữ liệu (ví dụ: MySQL), trước khi chuyển DNS, hãy đảm bảo các ứng dụng (ví dụ: PHP) từ cả hai máy chủ đang kết nối với cùng một cơ sở dữ liệu. Vì vậy, việc đọc và ghi sẽ đến cùng một vị trí và bạn không phải đối phó với các công cụ đồng bộ hóa DB khác nhau sau đó.

Điều này (rất có thể) sẽ ảnh hưởng đến thời gian tải trên một máy chủ nhưng trong thời gian chuyển đổi, điều này có thể được chấp nhận.

Trong trường hợp máy chủ DB không thể truy cập được từ bên ngoài, bạn cũng có thể thiết lập mysql_proxy trên máy chủ web có quyền truy cập vào nó và có thể truy cập được từ các IP bên ngoài.


3

Tôi sử dụng iptables cho việc này khi tôi cần làm việc này; một chút nhanh chóng của DNAT / SNAT và tất cả lưu lượng truy cập của bạn sẽ xuất hiện lại một cách kỳ diệu. Nếu bạn có nhu cầu thực sự duy trì địa chỉ IP nguồn, một proxy ngược có thể giúp đỡ, bằng cách đặt các tiêu đề phù hợp, nhưng điều đó đòi hỏi rất nhiều xung quanh ở cả hai đầu để đảm bảo tất cả đều khớp, vì vậy tôi thường không lo lắng về điều đó đối với một cái gì đó giống như di chuyển vì nó thoáng qua, và việc hạ thấp TTL xử lý hầu hết nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.