Tôi có một máy chủ nginx phục vụ gần nửa tá trang web khác nhau. Nó đang chạy trên Linode vừa có hỗ trợ riêng IPv6 (trung tâm dữ liệu Dallas) và tôi đang cố gắng định cấu hình hầu hết các trang web của mình để vận hành ngăn xếp kép. Tôi đã nhận được cái đầu tiên và chạy bằng tên miền phụ chỉ IPv6 như vậy:
server {
listen [::]:80 ipv6only=on;
listen 80;
server_name example.com ipv6.example.com;
root /var/www/example.com/htdocs;
#More stuff, including PHP, WordPress
}
Điều này hoạt động rất tốt - example.com chỉ dành cho IPv4 (hiện tại) và ipv6.example.com chỉ dành cho IPv6 (chủ yếu ở đó cho mục đích thử nghiệm). Tôi có thể ping6 ipv6.example.com
, và thậm chí wget ipv6.example.com
không đổ mồ hôi - điều này rất dễ chịu (sau khi tìm thấy "gotcha" với cách nginx liên kết các máy chủ ảo, đòi hỏi phải có ipv6only=on
lập luận và các listen
chỉ thị kép ).
Tuy nhiên, hiện tôi đang cố gắng mở rộng điều này để hỗ trợ các tên miền khác của mình, bắt đầu với static.example.com; Mặc dù vậy, khi tôi thực hiện cùng một cách tiếp cận như trên (các listen
chỉ thị kép , bao gồm cả ipv6only=on
đối số), tôi gặp lỗi sau khi khởi động lại nginx:
* Starting Nginx Server...
nginx: [emerg] a duplicate listen options for [::]:80 in /etc/nginx/sites-enabled/example.com.conf:3
Có vẻ như phương pháp ràng buộc cho IPv6 của nginx không cho phép các máy chủ ảo dựa trên tên? Tôi sẽ phải nhận thêm địa chỉ IPv6 từ máy chủ của mình (không phải là vấn đề) và sử dụng lưu trữ ảo dựa trên IP trên IPv6 với lưu trữ ảo dựa trên tên được đặt qua IPv4? Hoặc tôi đang thiếu một giải pháp cho phép cấu hình của tôi duy trì nhất quán trên cả hai ngăn xếp?
Tôi đã hy vọng có trang web của mình đầy đủ trên ngăn xếp IPv6 kịp thời cho Ngày IPv6 thế giới , nhưng trừ khi tôi có thể làm rõ điều này một cách nhanh chóng thì tôi có thể không sẵn sàng. Không phải là một vấn đề lớn từ bất kỳ quan điểm thực tế nào - không có trang web nào của tôi đủ điều kiện là một "tổ chức lớn" bởi bất kỳ sự tưởng tượng nào - nhưng hãy giúp tôi tiết kiệm uy tín của mình!
Chỉnh sửa để thêm:
Nhờ câu trả lời từ @kolbyjack, hiện tại tôi có một máy chủ web xếp chồng kép đầy đủ chức năng. Để rõ ràng, tôi đang chỉnh sửa giải pháp mà anh ấy đưa cho tôi để mọi người có thể thấy rõ câu trả lời là gì.
Vhost Catchall mặc định của tôi có các listen
chỉ thị sau :
listen 80 default_server;
listen 8080 default_server;
listen [::]:80 default_server ipv6only=on;
listen [::]:8080 default_server ipv6only=on;
Tôi không biết nếu thứ tự có vấn đề, nhưng nó có. Sau đó, mỗi vhost bổ sung có các listen
chỉ thị sau :
listen 80;
listen [::]:80;
(Hoặc 8080 cho một trong đó lắng nghe trên cổng đó để thay thế.) Phần quan trọng ở đây dường như là tổng thiếu của bất kỳ đối số bổ sung đối với tất cả ngoại trừ các vhost mặc định của listen
chỉ thị - tức là không có sự lặp lại của ipv6only=on
.
Một lần nữa, cảm ơn @kolbyjack về giải pháp tại đây!
ipv6only=on
. Mọi thứ khác vẫn giữ nguyên, tuy nhiên, cảm ơn vì điều này!