Hiawatha và fastcgi không hoạt động

Chào mọi người, em có cấu trúc project c++ như thế này:

|_ lib
       |_ lib_1
       |_ lib_2
|_app
        |_ app_1
        |_ app_2
        |_ app_3

lib_1, và lib_2 phụ thuộc vào các common lib và được build bằng vcpkg. Trong đó có thư viện chú ý là fastcgi.
CMakeLists cho project em có dạng thế này:

cmake_minimum_required(VERSION 3.22)
...
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
...

find_package(mongocxx CONFIG REQUIRED)
add_library(LibMongoCxx ALIAS mongo::mongocxx_static)
...
find_package(PkgConfig)
pkg_check_modules(FCGI REQUIRED IMPORTED_TARGET fcgi)

include(GNUInstallDirs)
add_library(lib_1 ...)
target_include_library(lib_1 ...)
target_link_libraries(hdm PUBLIC PkgConfig::FCGI)
target_link_libraries(hdm PUBLIC LibMongoCxx)

...
add_library(lib_2 ...)
target_include_library(lib_2 ...)
target_link_libraries(lib_2 PUBLIC lib_1)

...

add_executable(app_1 ...)
add_executable(app_2 ...)
add_executable(app_3 ...)
target_link_libraries(app_1 PRIVATE lib_2)
target_link_libraries(app_2 PRIVATE lib_2)
target_link_libraries(app_3 PRIVATE lib_2)

Hiện tại em đang sử dụng webserver hiawatha, install bằng clone project về:

git clone [email protected]:hsleisink/hiawatha.git
cd hiawatha
mkdir build
cd build
cmake ..
make
..... Building ...
sudo make install

Sau khi install và start server thì mọi thứ đều ổn.
Tiếp theo config cho server hiawatha như sau:

ConnectionsTotal = 100
ConnectionsPerIP = 100

#WorkDirectory = root
SystemLogfile = /usr/local/var/log/hiawatha/system.log
ExploitLogfile = /usr/local/var/log/hiawatha/exploit.log
AccessLogfile = /usr/local/var/log/hiawatha/access.log
ErrorLogfile = /usr/local/var/log/hiawatha/error.log
GarbageLogfile = /usr/local/var/log/hiawatha/garbage.log
PIDfile = /usr/local/var/run/hiawatha.pid

Hostname = 0.0.0.0
WebsiteRoot = /usr/local/var/www/public
StartFile = index.html
UseToolkit = MainToolKit
TimeForCGI = 60
SocketSendTimeout=60

Binding {
    Port = 80
    MaxRequestSize = 65536
    Interface = 0.0.0.0
    MaxUploadSize = 2047
}

FastCGIserver {
	FastCGIid = app_1_handler
	ConnectTo = /tmp/app-1-fcgi.sock
	SessionTimeout = 60
}

FastCGIserver {
	FastCGIid = app_2_handler
	ConnectTo = /tmp/app-2-fcgi.sock
	SessionTimeout = 60
}

UrlToolkit {
    ToolkitID = MainToolKit
    RequestURI isfile Return
    Match ^/(css|image|js)(/|$) Return
    Match ^/system/ UseFastCGI app_1_handler

    Match ^/api/ UseFastCGI app_2_handler
    Match ^/ UseFastCGI app_2_handler
}

Copy vào thư mục config của hiawatha và restart lại server, đến đây mọi thứ đều ổn.

Sau đó start các app_1, app_2, app_3; trong đó app_2, app_3 đều đã tạo được các file file socket fcgi trong thư mục /tmp/…
Sau đó vào trình duyệt web và test thử gọi các api, server đều hiển thị 404 page not found. Đã đặt các debug đầu hàm recevie handler nhưng đều không thấy chạy vào. Tuy nhiên, chỉ có 1 handler chạy vào được: 127.0.0.1.
Sau đó vào kiểm tra thư mục log error của hiawatha: /usr/local/var/log/hiawatha/error.log thấy có 1 vài lỗi: socket connection timeout.
Tóm lại: install và cài đặt hiawatha, chạy đều ổn. Application đã tạo socket fcgi thành công, server chỉ nhận đc 1 request duy nhất, còn lại đều không connect được (ngoài các file trong public dir đều nhận được)
Em đã thử build trên ubuntu 18, 22. subsystem, docker window.
Em không biết lỗi ở đâu, có thể là do CMakeLists có vấn đề, hoặc build hiawatha có vấn đề, hoặc build fastcgi có vấn đề (build với vcpkg), hoặc hệ điều hành window có vấn đề (vì em mới cài lại hệ điều hành window, trước đó cũng làm y hệt vậy và mọi thứ đều ổn, nhưng cmake là viết lại cho chưa kịp backup thì window bị lỗi phải cài lại :’(, không biết có sai sót gì không). Hoặc là phiên phản của hiawatha và fastcgi không tương thích. :’(
Em chắc chắn là code không có vấn đề vì được clone từ git về và trước đó chạy ổn.

Em đã ngồi cài đi cài lại 2 ngày rồi, mong các tiền bối giúp đỡ, em cảm ơn ạ.

2 Likes

Bạn đều nhận được cùng một lỗi khi deploy lên các platform trên đúng không?

Đúng r anh. :(((. Em nghĩ là do hđh window, đang định cài lại win 11.

Điều đầu tiên mình nghĩ là bạn nên hỏi người viết code đó, tại issue trên git cho họ đọc.

2 Likes

Em thấy community hiawatha ko lớn lắm, có ông tác giả thì push code 4 tháng trước r, không biết ổng còn follow ko, với em không thấy chỗ để issue bên gitlab như github, nên em lên đây hỏi thử xem sao.
Với lúc trước em cài hiawatha bằng cách add-apt-repository http://mirror.tuxhelp.org/debian/. Mà tầm 2, 3 tháng nay thì cái link này die luôn rồi, nên chuyển qua build source :’(

Thử các gói đã build sẵn ở đây? https://www.hiawatha-webserver.org/download , thấy có vẻ là được phát triển trên Debian, cho nên, phải ưu tiên Debian đầu tiên xem chạy không đã. Cài máy ảo, tạo một máy ảo chạy Debian và test trên đó xem trước khi kết luận.

2 Likes

Dạ vâng, em cảm ơn lời khuyên của anh. Sẽ cài thử trong máy ảo xem thế nào.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?