Điểm:0

Nginx ưu tiên cho các tên miền phụ dựa trên thứ tự bảng chữ cái của tệp cấu hình

lá cờ in

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 đỡ!!

Điểm:2
lá cờ us

Thông báo lỗi nói rõ rằng cấu hình thiếu chứng chỉ TLS cho rss.example.com. Tạo một chứng chỉ/cặp khóa thích hợp cho rss.example.comwww.rss.example.com, thì cấu hình sẽ hoạt động bình thường.

Michael Hampton avatar
lá cờ cz
Và các lệnh `listen` không bao gồm `ssl` .
Điểm:0
lá cờ za

Nginx đang sắp xếp tệp thực sự bao gồm chứa các máy chủ ảo. Bởi vì điều đó thoải mái hơn khi sử dụng và để hiểu logic của việc chọn cái mặc định - và đây sẽ là tệp bao gồm vhost đầu tiên khi được sắp xếp theo thứ tự bảng chữ cái.

Trên thực tế, bạn đang tìm kiếm mặc định tùy chọn để nghe chỉ thị, được sử dụng để chấm dứt tất cả các trang web khác không phù hợp với tên máy chủ đề cập trong của bạn người phục vụ {} khối.

thêm mặc định tùy chọn để nghe chỉ thị của máy chủ ảo sẽ chấm dứt tất cả các yêu cầu nếu không có tên máy chủ phù hợp.

Đă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.