Tại sao 14 ký tự có độ dài tối đa cho lệnh nginx server_name?


13

Tôi có máy chủ ảo sau

server
{
  server_name abc.example.com;
  root /var/www/test/;
  index index.html;
}

Khi chạy nginx -s reloadtôi gặp lỗi sau:

nginx: [nổi lên] không thể xây dựng server_names_hash, bạn nên tăng server_names_hash_bucket_size: 32

Điều tương tự cũng xảy ra với bất kỳ tên máy chủ nào có 15 ký tự trở lên.

Nếu tôi đặt tên máy chủ thành ab.example.com(hoặc bất kỳ tên nào dưới 15 ký tự), sự cố sẽ dừng biểu hiện.

Để khắc phục điều này, tôi đã thêm vào phần sau /etc/nginx/nginx.conf(không được xác định trước):

server_names_hash_bucket_size 64;

Đặt nó thành 33 cũng hoạt động, nhưng không phải 32.

Tại sao độ dài tối đa mặc định 14 ký tự cho server_name?

Là giới hạn này được áp đặt bởi cài đặt mặc định của nginx hoặc bởi hệ thống mà nó chạy trên?

Làm thế nào để một tên máy chủ 15 ảnh hưởng đến kích thước nhóm băm tối đa? (chỉ có 4 máy chủ ảo được xác định trên hệ thống)


Nội dung của grep "" /sys/devices/system/cpu/cpu?/cache/index?/coherency_line_sizecái gì?
Xavier Lucas

@XavierLucas:/sys/devices/system/cpu/cpu0/cache/index0/coherency_line_size:64 /sys/devices/system/cpu/cpu0/cache/index1/coherency_line_size:64 /sys/devices/system/cpu/cpu0/cache/index2/coherency_line_size:64
Virgiliu

Câu trả lời:


11

Lỗi này xảy ra khi server_namequá lớn để phù hợp với xô băm .

Mặc định cho server_names_hash_bucket_sizeđược chọn tùy thuộc vào kích thước dòng bộ đệm CPU của máy chủ. Cụ thể, nó có nghĩa là càng nhỏ càng tốt, để giảm các lỗi bộ nhớ cache của CPU , vì server_names phải được tra cứu theo mọi yêu cầu.

Về lý do tại sao bạn giới hạn ở 14 ký tự thay vì 31 ký tự, tôi nghi ngờ một trong hai khả năng:

  • Tệp cấu hình của bạn ở dạng mã hóa UTF-16 (hoặc một số mã hóa khác) thay vì UTF-8, khiến null xuất hiện trước hoặc sau mỗi ký tự trong dữ liệu thô và tăng gấp đôi kích thước của nó. Điều này có thể xảy ra nếu bạn chỉnh sửa tệp trên Windows. Nếu đây là trường hợp, sử dụng một cái gì đó như iconvđể sửa chữa nó.
  • Bạn đã gặp phải một lỗi không xác định trong nginx.

Vim nói rằng fileencoding = utf-8. Tôi đã thực hiện chuyển đổi bằng iconv để đảm bảo rằng mã hóa là UTF8 nhưng không có gì thay đổi trong hành vi nginx. Có lẽ VPS của tôi có CPU với kích thước dòng bộ đệm rất nhỏ, có cách nào để tôi kiểm tra nó không và giá trị nào hợp lý cho nó?
Virgiliu

Giá trị hợp lý là sức mạnh nhỏ nhất của hai mà nginx sẽ khởi động thành công. Nếu bạn có VPS, nó có thể làm bất cứ điều gì ...
Michael Hampton

6

Độ dài mặc định sẽ được xác định tự động trong khi bắt đầu, tùy thuộc vào tên máy chủ được sử dụng, nhưng điều này cũng cần được cập nhật trong quá trình reloadhoạt động. Xem nếu nó hoạt động mà không thiết lập kích thước xô thủ công nhưng với khởi động lại thay vì tải lại.

Xem http://nginx.org/en/docs/hash.html để tìm hiểu cách xác định kích thước băm và http://nginx.org/en/docs/http/server_names.html để đọc về băm được sử dụng cho tên máy chủ.

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.