Nginx Tên miền khác nhau trên cùng một IP


127

Tôi muốn lưu trữ 2 tên miền khác nhau trong cùng một máy chủ bằng nginx. Tôi đã chuyển hướng cả hai tên miền đến máy chủ này thông qua tài sản @. Mặc dù tôi định cấu hình 2 khối máy chủ khác nhau, bất cứ khi nào tôi cố gắng truy cập tên miền thứ hai, nó sẽ chuyển hướng đến khối đầu tiên.

Đây là cấu hình của tôi.

server {
    listen      www.domain1.com:80;
    access_log  /var/log/nginx/host.domain1.access.log  main;
    root /var/www/domain1;
    server_name www.domain1.com;

    location ~ \.php$ {
        # Security: must set cgi.fixpathinfo to 0 in php.ini!
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME         $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        include /etc/nginx/fastcgi_params;
    }
}

server {
    listen       www.domain2.com:80;
    access_log  /var/log/nginx/host.domain2.access.log  main;
    root /var/www/domain2;
    server_name www.domain2.com;

    location ~ \.php$ {
        # Security: must set cgi.fixpathinfo to 0 in php.ini!
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME         $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        include /etc/nginx/fastcgi_params;
    }
}

Làm thế nào tôi có thể sửa lỗi này? Cảm ơn.

Câu trả lời:


163

Chỉ thị "lắng nghe" của bạn là sai. Xem trang này: http://nginx.org/en/docs/http/server_names.html .

Họ nên

server {
    listen      80;
    server_name www.domain1.com;
    root /var/www/domain1;
}

server {
    listen       80;
    server_name www.domain2.com;
    root /var/www/domain2;
}

Lưu ý, tôi chỉ bao gồm các dòng có liên quan. Mọi thứ khác trông ổn nhưng tôi chỉ xóa nó cho rõ ràng. Để kiểm tra nó, bạn có thể muốn thử phân phát tệp văn bản từ mỗi máy chủ trước khi thực sự phục vụ php. Đó là lý do tại sao tôi để lại chỉ thị 'gốc' trong đó.


9
CÁi này đã sửa nó giúp tôi. Vấn đề dường như là trong cả hai server {}khối của tôi , các lệnh sever_name đều là ký tự đại diện: .domain1.com.domain2.com. Thay đổi chúng thành server_name www.domain1.com domain1.com;server_name www.domain2.com domain2.com;bây giờ có trang chính xác cho mỗi trang web hiển thị khi những địa chỉ đó được sử dụng.
Steve HHH

4
Tôi biết điều này đang nạo vét một bình luận cổ xưa. Nhưng tôi giả sử rằng hai khối máy chủ này có thể nằm trong các tệp cấu hình riêng biệt trong các trang web được kích hoạt /?
labarna

3
Hoàn toàn, nó chỉ phụ thuộc vào cách bạn muốn cấu trúc cấu hình của bạn. Tôi có xu hướng có một tệp cho mỗi tên miền thực. Mỗi trong số đó có thể chứa nhiều khối máy chủ.
aychedee

5
Bạn thực sự không muốn làm điều đó. Chọn www.domain.com hoặc domain.com và chuyển hướng cái này sang cái khác. Có cùng một nội dung tại hai địa chỉ khác nhau được coi là spam và có thể làm hỏng nặng thứ hạng tìm kiếm của bạn.
aychedee

4
Bạn cũng có thể chỉ cần sử dụng .domain.com. Đó là một ký tự nginx đặc biệt phù hợp domain.com*.domain.com. Xem: nginx.org/en/docs/http/server_names.html
aychedee
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.