TLDR: Nginx đang ưu tiên tên miền phụ theo thứ tự bảng chữ cái của tệp cấu hình và tôi muốn biết cách ngăn điều này xảy ra. Đây là tương tự đến cái này câu hỏi, nhưng tôi quan tâm hơn đến việc cải thiện hệ thống của mình.
Tôi (có) hai phần trên máy chủ của mình: Một dành cho trang web tĩnh và một dành cho phiên bản dokuwiki của tôi. Tôi muốn dokuwiki tải khi ai đó truy cập example.com và trang web tĩnh tải khi ai đó truy cập static.example.com. Cuối cùng, tôi muốn wiki.example.com luôn trỏ đến dokuwiki, trong trường hợp mặc định thay đổi.
Để thực hiện điều này, tôi có hai tệp trong /etc/nginx/sites-available.
dokuwiki (Đây chỉ là một cấu hình dokuwiki phổ biến với certbot chạy trên đó)
người phục vụ {
nếu ($host = www.example.com) {
trả lại 301 https://$host$request_uri;
} # được quản lý bởi Certbot
nếu ($host = example.com) {
trả lại 301 https://$host$request_uri;
} # được quản lý bởi Certbot
nếu ($host = wiki.example.com) {
trả lại 301 https://$host$request_uri;
} # được quản lý bởi Certbot
nghe 80;
nghe [::]:80;
server_name wiki.example.com example.com www.example.com;
trả về 301 https://$server_name$request_uri;
}
người phục vụ {
nghe [::]:443 ssl;
nghe 443 ssl;
server_name example.com www.example.com wiki.example.com;
# Kích thước tệp tải lên tối đa là 4MB - thay đổi tương ứng nếu cần
client_max_body_size 4M;
khách_thân_đệm_size 128k;
gốc /dokuwiki/dokuwiki-2020-07-29;
chỉ mục doku.php;
#Hãy nhớ nhận xét bên dưới khi bạn cài đặt và bỏ ghi chú khi hoàn tất.
vị trí ~ /(conf/|bin/|inc/|install.php) { từ chối tất cả; }
#Hỗ trợ cho X-Accel-Redirect
vị trí ~ ^/dữ liệu/ { nội bộ; }
vị trí ~ ^/lib.*\.(js|css|gif|png|ico|jpg|jpeg)$ {
hết hạn 365d;
}
vị trí / { try_files $uri $uri/ @dokuwiki; }
địa điểm @dokuwiki {
# viết lại "doku.php/" ra khỏi URL nếu bạn đặt cài đặt ghi người dùng thành .htaccess trong trang cấu hình dokuwiki
viết lại ^/_media/(.*) /lib/exe/fetch.php?media=$1 cuối cùng;
viết lại ^/_detail/(.*) /lib/exe/detail.php?media=$1 cuối cùng;
viết lại ^/_export/([^/]+)/(.*) /doku.php?do=export_$1&id=$2 last;
viết lại ^/(.*) /doku.php?id=$1&$args cuối cùng;
}
vị trí ~ \.php$ {
try_files $uri $uri/ /doku.php;
bao gồm fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param REDIRECT_STATUS 200;
fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
# fastcgi_pass unix:/var/run/php5-fpm.sock; #phiên bản php cũ
}
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # được quản lý bởi Certbot
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # được quản lý bởi Certbot
}
tĩnh
người phục vụ {
gốc/var/www/ví dụ;
chỉ mục index.html index.htm index.nginx-debian.html;
server_name static.example.com;
địa điểm / {
try_files $uri $uri/ =404;
}
lắng nghe [::]:443 ssl ipv6only=on; # được quản lý bởi Certbot
nghe 443 ssl; # được quản lý bởi Certbot
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # được quản lý bởi Certbot
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; # được quản lý bởi Certbot
bao gồm /etc/letsencrypt/options-ssl-nginx.conf; # được quản lý bởi Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # được quản lý bởi Certbot
}
Hệ thống này hoạt động chính xác như tôi mong đợi. Tuy nhiên, sau đó tôi đã thêm commafeed vào máy chủ của mình. Mục tiêu của tôi là truy cập commafeed qua rss.example.com. Commafeed chạy trên cổng 8082, vì vậy tôi đã gửi proxy_pass tới example.com/8082 trong tệp này
thông tin liên lạc
người phục vụ {
nghe 443;
nghe [::]:443;
gốc /var/www/commafeed;
chỉ mục index.html index.htm index.nginx-debian.html;
server_name rss.example.com www.rss.example.com;
địa điểm / {
proxy_pass http://example.com:8082/;
tắt proxy_buffering;
proxy_set_header Máy chủ lưu trữ $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Khi tôi làm điều này, tôi đã đặt lại kết nối trên trình duyệt của mình cho tất cả các example.com và thông báo lỗi này được ghi lại
ví dụ:/etc/nginx/sites-available# đuôi -f /var/log/nginx/error.log -n 0
28/09/2021 03:10:36 [lỗi] 32479#32479: *2317 không có "ssl_certificate" nào được xác định trong máy chủ lắng nghe trên cổng SSL trong khi bắt tay SSL, máy khách: <địa chỉ ipv6 của tôi>, máy chủ: [::]: 443
28/09/2021 03:10:36 [lỗi] 32479#32479: *2318 không có "ssl_certificate" nào được xác định trong máy chủ lắng nghe trên cổng SSL trong khi bắt tay SSL, máy khách: <địa chỉ ipv6 của tôi>, máy chủ: [::]: 443
Tuy nhiên, khi tôi đổi tên tệp thành "zcommafeed", mọi thứ đều hoạt động như dự kiến. Nghĩa là, tất cả các tên miền phụ cũ đều hoạt động như trước đây, cũng như rss.example.com trỏ đến nguồn cấp dữ liệu chung.
Bây giờ, trong khi điều này hoạt động, điều này dường như ngụ ý rằng có một cách tốt hơn để làm điều này mà không liên quan đến việc chú ý đến thứ tự bảng chữ cái của tệp. Tôi chưa quen với NGINX, vì vậy tôi thực sự đánh giá cao sự giúp đỡ!!