Điểm:0

Nginx - Làm cách nào để buộc tất cả các miền máy chủ và khối máy chủ sử dụng chuyển hướng không phải www?

lá cờ de

Có rất nhiều kết quả tốt về cách chuyển hướng "www" sang "không phải www" và ngược lại.

nhiều nhất giải pháp được đề xuất là đây:

người phục vụ {
    nghe 80;
    server_name www.example.com;
    trả lại 301 https://example.com$request_uri;
}

Điều này hoạt động tốt cho một tệp cấu hình trang web. Tuy nhiên, nó nhanh chóng sao chép cấu hình khi bạn có nhiều trang web dưới một máy chủ Nginx.

Tôi thực sự muốn tránh sao chép cấu hình trên một dịch vụ mà tôi đang làm việc...

Vì vậy, giải pháp giả định của tôi để nắm bắt tất cả các miền www.[anything.com] trông giống như thế này:

người phục vụ {
    nghe 80;
    trả lại 301 https://$host$request_uri;
}

Tuy nhiên, tôi tin rằng máy chủ $ biến vẫn chứa "www" bên trong (điều này hợp lý).

Tôi đang cố gắng kiểm tra điều này với cấu hình hiện tại của mình, vì vậy để tiết kiệm thời gian, vui lòng ai đó có nhiều kinh nghiệm Nginx hơn có thể chỉ cho tôi đi đúng hướng sau điểm này không?

Cảm ơn bạn đã dành thời gian!

Điểm:2
lá cờ us

Bạn có thể sử dụng phương pháp sau:

người phục vụ {
    nghe 80;
    server_name ~^(?:www\.)(.*)$;

    trả lại 301 https://$1$request_uri;
}

Biểu thức chính quy nắm bắt phần sau www. đến $1 biến, sau đó được sử dụng trong trở lại bản tường trình.

https://nginx.org/r/server_name giải thích chi tiết hơn về cách nginx quyết định người phục vụ khối để sử dụng.

Michael Hampton avatar
lá cờ cz
Và hãy nhớ bao gồm một khối ssl `server` với (các) chứng chỉ phù hợp.
Matthew Spence avatar
lá cờ de
Điều này rất mạnh mẽ cảm ơn bạn! Tôi sẽ đánh dấu đây là câu trả lời đúng cho câu hỏi này. Tuy nhiên, tôi sẽ tò mò liệu có giải pháp không phải regex nào để cải thiện hiệu suất không?
lá cờ us
Không, không phải vì bạn cần trích xuất một phần tên máy chủ và regex là cách duy nhất để làm điều đó.
Điểm:0
lá cờ ar
người phục vụ { 

         server_name example.com; 

         trả lại 301 https://www.example.com$request_uri; 

}

Theo mặc định, nếu bạn bỏ qua lệnh này, nginx sẽ cho rằng bạn muốn nghe trên cổng 80.

đây tài liệu của hành vi mặc định này.

Đây là cấu hình hoàn chỉnh cho default-ssl.conf của bạn

người phục vụ {

 nghe 443 ssl;

 server_name example.com; 

ssl_certificate /srv/www/example.com/keys/ssl.crt; 

ssl_certificate_key /srv/www/example.com/keys/www.example.com.key; 

trả lại 301 https://www.example.com$request_uri; 

}

Bạn có thể thay thế ssl trên; chỉ thị với ssl nghe 443; như khuyến nghị từ tài liệu nginx.

Matthew Spence avatar
lá cờ de
Cảm ơn bạn vì câu trả lời. Thật không may, điều này không giúp ích gì cho nỗ lực tạo ra giải pháp "bắt tất cả" vì vậy bạn không cần phải viết cấu hình cho mỗi miền (như cách bạn làm với cấu hình của bạn ở đây chỉ hoạt động cho `example.com` chứ không phải `example-2. com`)
Điểm:0
lá cờ sv

Chào mừng đến với ServerFault.

Trong khi những gì Tero Kilkanen trả lời là khái niệm cốt lõi, một tốt hơn cách để làm điều tương tự đã được cung cấp trong tài liệu chính thức tại https://nginx.org/r/server_name và tại https://nginx.org/en/docs/http/server_names.html.

người phục vụ {
    server_name ~^www\.(?<baredomain>.+)$;
    trả về 301 https://$baredomain$request_uri;
}

Điều này sử dụng một phương pháp gọi là "Ảnh chụp được đặt tên" trong khi đánh giá một biểu thức chính quy. "Ảnh chụp được đặt tên" có thể sử dụng bất kỳ cú pháp nào sau đây...

?<name> Cú pháp tương thích với Perl 5.10, được hỗ trợ kể từ PCRE-7.0
?'name' Cú pháp tương thích với Perl 5.10, được hỗ trợ kể từ PCRE-7.0
?P<name> Cú pháp tương thích với Python, được hỗ trợ kể từ PCRE-4.0

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.