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 ạ.