Điểm:0

nginx reverse proxy 404 with two servers

lá cờ va

I have a problem with my NGINX configuration. I have two webservers running on windows servers. Which one is called from outside with 443 and then should be forwarded to the server with 41001. The second server block should be called the FQDN and nginx should forward this to FQDN.com/test. Internal and external.

On the first server block this takes forever to load and nothing seems to work. With the second server block I get a 404 back.

This is what my configurations look like and the error logs

server {
    server_name test.example.com;
    return 301 http://test.example.com/test$request_uri;
    }


server {
        listen  443 ssl http2;
        listen  [::]:443 ssl http2;
 
        access_log /var/log/nginx/test_service_access.log;
        error_log /var/log/nginx/test_service_error.log;

        ssl_certificate /etc/nginx/ssl/test.com.pem;
        ssl_certificate_key /etc/nginx/ssl/test.key;
        ssl_session_timeout 1d;
        ssl_session_tickets off;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-G>        ssl_prefer_server_ciphers off;

        location /test {
        proxy_pass https://10.10.10.10/test/;
        }

        client_max_body_size    0;
        proxy_connect_timeout   90s;
        proxy_send_timeout              90s;
        proxy_read_timeout              90s;
        send_timeout                    90;
    }

server {
        server_name test2.example.com;
        # Redirect all HTTP requests to HTTPS with a 301 Moved Permanently response.
        return 301 https://test2.example.com$request_uri;
}

server {
        listen  443 ssl http2;
        listen  [::]:443 ssl http2;
        server_name test2.example.com;

        access_log /var/log/nginx/test2_service_access.log;
        error_log /var/log/nginx/test2_service_error.log;

        ssl_certificate /etc/nginx/ssl/test2.example.com.pem;
        ssl_certificate_key /etc/nginx/ssl/test2example.key;

#       ssl_session_cache shared:SSL:50m;
        ssl_session_timeout 1d;
        ssl_session_tickets off;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-G>
        ssl_prefer_server_ciphers off;

        add_header Strict-Transport-Security max-age=15768000;

        location / {

#       resolver 10.150.10.10 8.8.8.8;
        proxy_pass https://test2.example.com:41001/;
        proxy_redirect  https://test2.example.com:41001/ https://test2.example.com/;

        client_max_body_size    0;
        proxy_connect_timeout   90s;
        proxy_send_timeout              90s;
        proxy_read_timeout              90s;
        send_timeout                    90;
        }
    }
}

I looked at the error.logs and this is what came up.

2022/02/13 12:54:58 [error] 2620#2620: *15 open() "/usr/share/nginx/html/DocuWare/Platform/LoginRedirect" failed (2: No such file or directory), client: xxx.xxx.xxx.xxx, server: , request: "GET /DocuWare/Platform/LoginRedirect?returnUrl=%2fdocuware%2fPlatform%2fWebClient%2f HTTP/2.0", host: "test2.domain.com", referrer: "https://test.domain.com/docuware/Platform/WebClient/"

2022/02/13 12:35:17 [error] 2541#2541: *1 upstream timed out (110: Connection timed out) while connecting to upstream, client:

Regarding the first error, I don't understand exactly what is wrong

As I understand it, I need to define an upstream for the server with port 41001, is that correct?

Am I missing something here?

UPDATE

I have adjusted my configuration to the smallest so that I can test this. As follows my configuration looks like this

######################################################################
   upstream abacus {
      server 10.120.50.11; 
   }
   
   server {
      listen 80;
      server_name abacus.example.com;
      return 301 https://abacus.example.com$request_uri;
   }
    
   server {
      listen 443 ssl;
      server_name abacus.example.com;
      ssl_certificate /etc/nginx/ssl/xxx.com.pem;
      ssl_certificate_key /etc/nginx/ssl/xxx.key;
      ssl_protocols TLSv1.2 TLSv1.3;

      access_log /var/log/nginx/abacus_service_access.log;
      error_log /var/log/nginx/abacus_service_error.log;

   location / {
      proxy_pass http://abacus;
   }
}

#######################################################################
   upstream docuware {
      server 10.120.50.10; 
   }
   
   server {
      listen 80;
      server_name docuware.example.com;
      return 301 https://docuware.example.com$request_uri;
   }
   
   server {
      listen 443 ssl;
      server_name docuware.example.com;
      ssl_certificate /etc/nginx/ssl/xxx.pem;
      ssl_certificate_key /etc/nginx/ssl/xxx.key;
      ssl_protocols TLSv1.2 TLSv1.3;

      access_log /var/log/nginx/docuware_service_access.log;
      error_log /var/log/nginx/docuware_service_error.log;
      
   location / {
      proxy_pass http://docuware/docuware;
   }
}
}

When I access the server "abacus.example.com", I get to the IIS homepage. So here I have to define that I come from outside with 443 (HTTPS) and I am redirected to port 23001.

If I access the server "docuware.example.com/docuware", I get a 404 - File or directory was not found. So here I have to define somehow that it can access the server with the subpath.

In the internal network this works without problems. I am redirected to "docuware.example.com/DocuWare/Platform/WebClient/ClientAccount/xxx".

Do you see here what I have to adjust? I've been beating my head against it for hours.

djdomi avatar
lá cờ za
proxy_pass imho được đặt sai
lá cờ us
Vui lòng thêm các yêu cầu ví dụ, URL chính xác mà bạn đang cố yêu cầu và kết quả mong đợi và kết quả thực tế là gì.
lá cờ va
tôi đã chỉnh sửa bài đăng của mình để biết thêm thông tin
lá cờ va
@TeroKilkanen Đã thêm các bản cập nhật cho các yêu cầu
lá cờ us
Bạn có đang sử dụng cùng một URL khi truy cập qua mạng nội bộ và mạng bên ngoài không?
lá cờ va
@TeroKilkanen Có, tôi đồng ý. Từ bên trong, tôi truy cập bằng "https://docuware.domain.com/docuware" và "https://abacus.domain.com" và nó hoạt động. Vì vậy, đó là lý do tại sao tôi đang cố gắng làm thế nào để tôi có thể thực hiện công việc đó từ bên ngoài. Đối với máy chủ bàn tính, proxypass có ":23001" và chuyển hướng có hoạt động không? và đối với phần mềm docuware có đường dẫn phụ "/ docuware" từ bên ngoài..tôi thực sự không biết làm cách nào để giải quyết vấn đề đó.
Điểm:0
lá cờ cl

Lỗi đầu tiên nói rằng nginx không thể tìm thấy tệp cụ thể tại vị trí mà anh ta có. Một cách để giải quyết vấn đề đó là cung cấp cho nginx một thư mục cụ thể cho các tệp được yêu cầu. Đó là cách máy chủ web hoạt động.

Tôi không chắc liệu bạn có thể chuyển hướng người dùng bằng nginx từ lưu lượng không phải SSL sang lưu lượng SSL hay không. Cả yêu cầu và phản hồi phải được mã hóa/không mã hóa giống nhau cho dù có bao nhiêu bước để truy cập máy chủ mục tiêu từ trình duyệt web của người dùng.

Xem nhật ký nginx nếu nginx đi vào vòng lặp, trong khi yêu cầu đang chuyển đến cùng một máy chủ được chuyển hướng.

lá cờ va
và làm thế nào tôi có thể làm điều đó? tôi đã quản lý nó ngay bây giờ để có được trang chủ IIS với "docuware.domain.com/docuware" nhưng bây giờ tôi lại gặp khó khăn...
pbies avatar
lá cờ cl
@ Cyanmodex9 làm gì?
Điểm:0
lá cờ us

Một điều có thể cần thiết là đặt tiêu đề Máy chủ phù hợp cho các tiêu đề được ủy quyền:

Đối với bàn tính:

địa điểm / {
    proxy_set_header Máy chủ abacus.example.com;
    proxy_pass http://abacus;
}

Đối với phần mềm tài liệu:

vị trí /docuware {
    proxy_set_header Máy chủ docuware.example.com;
    proxy_pass http://docuware/docuware/;
}
lá cờ va
Cảm ơn rất nhiều! điều này đã giải quyết vấn đề của tôi với bàn tính. Nó đang làm việc bây giờ. Vẫn gặp sự cố với docuware. Tôi không tìm thấy trang 404 nhưng url thay đổi thành "/Platform/WebClient/". Nhật ký lỗi cho biết "/usr/share/nginx/html/Platform/WebClient/index.html" không tìm thấy"
lá cờ us
URL đầy đủ mà nó thay đổi thành là gì?
lá cờ va
xin chào Tero! Cảm ơn rất nhiều cho kiến ​​thức ur và giúp đỡ. Tôi quản lý để làm cho nó hoạt động. tôi đặt máy chủ tiêu đề và proxy_pass có / ở cuối và đặt read_timeout.Biết mọi thứ hoạt động! điều cuối cùng duy nhất là tự động thay đổi url "docuware.domain.com" thành "docuware.domain.com/docuware" khi truy cập nó qua trình duyệt. Tôi nghĩ rằng tôi có thể giải quyết điều đó :)

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