ฉันยังคงอธิบายปัญหาและสถานการณ์ที่ซับซ้อนเล็กน้อยสำหรับความรู้ที่จำกัดของฉัน
ตอนแรกฉันคิดว่ามันเป็นปัญหาที่เกี่ยวข้องกับประสิทธิภาพของสคริปต์และข้อความค้นหาของฉัน ดังนั้นฉันจึงสร้างโพสต์นี้ในไซต์เป็นภาษาสเปน: ลิงค์
แต่หลังจากการค้นคว้าในช่วงบ่ายเป็นส่วนใหญ่ ฉันกำลังจะระบุว่าทั้งหมดเกิดจากการกำหนดค่าสภาพแวดล้อม dev ของฉันไม่ถูกต้อง
ฉันกำลังทำงานกับเซิร์ฟเวอร์ 2 อุปกรณ์:
ท้องถิ่น:
- วินโดวส์ 10
- เซิร์ฟเวอร์ลากอน
การพัฒนา:
ในกรณีนี้ฉันจะเน้น ท้องถิ่น:
ฉันได้กำหนดค่า laragon stack เพื่อรองรับโฮสต์เสมือนและเรียกใช้ PHP 2 เวอร์ชัน (7.2 / 7.4)
ฉันทำตาม 2 คำแนะนำนี้แล้ว: ลิงค์ 1 และ ลิงค์ 2
การกำหนดค่า apache ของฉัน:
กำหนด SRVROOT "C:/laragon/bin/apache/httpd-2.4.47-win64-VS16"
ServerRoot "C:/laragon/bin/apache/httpd-2.4.47-win64-VS16"
ฟัง 80
LoadModule access_compat_module modules/mod_access_compat.so
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module โมดูล/mod_alias.so
LoadModule allowmethods_module modules/mod_allowmethods.so
LoadModule asis_module โมดูล/mod_asis.so
LoadModule auth_basic_module โมดูล/mod_auth_basic.so
LoadModule authn_core_module โมดูล/mod_authn_core.so
LoadModule authn_file_module โมดูล/mod_authn_file.so
LoadModule authz_core_module โมดูล/mod_authz_core.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_host_module โมดูล/mod_authz_host.so
LoadModule authz_user_module โมดูล/mod_authz_user.so
LoadModule autoindex_module โมดูล/mod_autoindex.so
LoadModule cgi_module โมดูล/mod_cgi.so
LoadModule dir_module โมดูล/mod_dir.so
LoadModule env_module โมดูล/mod_env.so
LoadModule headers_module modules/mod_headers.so
LoadModule include_module modules/mod_include.so
LoadModule isapi_module modules/mod_isapi.so
LoadModule log_config_module โมดูล/mod_log_config.so
LoadModule mime_module โมดูล/mod_mime.so
LoadModule การเจรจาต่อรองโมดูลโมดูล/mod_negotiation.so
LoadModule rewrite_module โมดูล/mod_rewrite.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule socache_shmcb_module โมดูล/mod_socache_shmcb.so
LoadModule โมดูล ssl_module/mod_ssl.so
LoadModule version_module modules/mod_version.so
<IfModule unixd_module>
ภูตผู้ใช้
กลุ่มภูต
</หากโมดูล>
ผู้ดูแลระบบเซิร์ฟเวอร์ admin@example.com
ชื่อเซิร์ฟเวอร์ Laragon
<ไดเร็กทอรี />
AllowOverride ไม่มี
ต้องการปฏิเสธทั้งหมด
</ไดเร็กทอรี>
รูทเอกสาร "C:/laragon/www"
<ไดเรกทอรี "C:/laragon/www">
ดัชนีตัวเลือก FollowSymLinks รวมถึง ExecCGI
AllowOverride ไม่มี
ต้องได้รับอนุญาตทั้งหมด
</ไดเร็กทอรี>
<IfModule dir_module>
DirectoryIndex index.html index.php
</หากโมดูล>
<ไฟล์ ".ht*">
ต้องการปฏิเสธทั้งหมด
</ไฟล์>
บันทึกข้อผิดพลาด "logs/error.log"
ข้อผิดพลาด LogLevel
<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" รวมกัน
LogFormat "%h %l %u %t \"%r\" %>s %b" ทั่วไป
<IfModule logio_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" รวมกัน
</หากโมดูล>
CustomLog "logs/access.log" ทั่วไป
</หากโมดูล>
<IfModule alias_module>
ScriptAlias /cgi-bin/ "${SRVROOT}/cgi-bin/"
</หากโมดูล>
<IfModule cgid_module>
#
# ScriptSock: บนเธรดเซิร์ฟเวอร์ กำหนดพาธไปยัง UNIX
# socket ที่ใช้สื่อสารกับ CGI daemon ของ mod_cgid
#
#Scriptsock cgisock
</หากโมดูล>
<ไดเรกทอรี "${SRVROOT}/cgi-bin">
AllowOverride ไม่มี
ตัวเลือกไม่มี
ต้องได้รับอนุญาตทั้งหมด
</ไดเร็กทอรี>
<ส่วนหัวของ IfModule_module>
RequestHeader ยกเลิกการตั้งค่า Proxy ก่อนกำหนด
</หากโมดูล>
<IfModule mime_module>
TypesConfig conf/mime.types
แอปพลิเคชัน AddType/x-compress .Z
แอปพลิเคชัน AddType/x-gzip .gz .tgz
</หากโมดูล>
# กำหนดค่า mod_proxy_html เพื่อทำความเข้าใจ HTML4/XHTML1
<IfModule proxy_html_module>
รวม conf/extra/proxy-html.conf
</หากโมดูล>
<IfModule ssl_module>
ในตัวเริ่มต้น SSLRandomSeed
SSLRandomSeed เชื่อมต่อในตัว
</หากโมดูล>
ยอมรับตัวกรอง http ไม่มี
ยอมรับตัวกรอง https ไม่มี
ปิดใช้งานส่งไฟล์
ปิดการใช้งาน MMAP
รวมทางเลือก "C:/laragon/etc/apache2/alias/*.conf"
รวมทางเลือก "C:/laragon/etc/apache2/sites-enabled/*.conf"
รวม "C:/laragon/etc/apache2/httpd-ssl.conf"
รวม "C:/laragon/etc/apache2/mod_php.conf"
ScriptAlias /php72 "C:/laragon/bin/php/php72"
แอปพลิเคชันการดำเนินการ/x-httpd-php72-cgi /php72/php-cgi.exe
<ไดเรกทอรี "C:/laragon/bin/php/php72">
AllowOverride ไม่มี
ตัวเลือกไม่มี
ต้องการปฏิเสธทั้งหมด
<ไฟล์ "php-cgi.exe">
ต้องได้รับอนุญาตทั้งหมด
</ไฟล์>
</ไดเร็กทอรี>
โฮสต์เสมือน:
<VirtualHost *:80>
DocumentRoot "D:/webdev/Local/test1/"
ServerName test1.me
ServerAlias *.test1.me
<Directory "D:/webdev/test1/">
AllowOverride All
Require all granted
</Directory>
<FilesMatch "\.php$">
SetHandler application/x-httpd-php72-cgi
</FilesMatch>
</VirtualHost>
นามแฝงของ phpmyadmin
นามแฝง /phpmyadmin "C:/laragon/etc/apps/phpMyAdmin/"
<ไดเรกทอรี "C:/laragon/etc/apps/phpMyAdmin/">
ดัชนีตัวเลือก FollowSymLinks MultiViews
AllowOverride ทั้งหมด
ต้องการท้องถิ่น
</ไดเร็กทอรี>
การกำหนดค่า MySQL
[ลูกค้า]
#password=รหัสผ่านของคุณ
พอร์ต = 3306
socket=/tmp/mysql.sock
[มายเอสคิวลด์]
พอร์ต = 3306
socket=/tmp/mysql.sock
key_buffer_size=512M
max_allowed_packet=4096M
table_open_cache=256
sort_buffer_size=32M
read_buffer_size=32M
read_rnd_buffer_size=32M
myisam_sort_buffer_size=128M
thread_cache_size=16
ปลอดภัยไฟล์-priv=""
explicit_defaults_for_timestamp=1
datadir = "C:/laragon/data/mysql"
lower_case_table_names=2
sql_mode=""
wait_timeout=28800
interactive_timeout=28800
[mysqldump]
เร็ว
max_allowed_packet=4096M
การกำหนดค่า PHP สำหรับทั้งสองเวอร์ชัน (7.2/7.4)
file_uploads = เปิด
upload_max_filesize=4096M
max_file_uploads = 100
allow_url_fopen = เปิด
memory_limit = 3G
post_max_size = 600M
max_execution_time = 5,000
max_input_time = 5,000
max_input_vars = 5,000
date.timezone= อเมริกา/ปานามา
error_reporting = E_ALL
display_errors = เปิด
display_startup_errors = เปิด
html_errors = เปิด
session.gc_maxlifetime = 2592000
session.cache_expire = 2592000
อย่างที่คุณเห็นฉันกำลังให้บริการ php 7.4 โดยค่าเริ่มต้นโดยใช้ apache handler 2.0; ฉันกำลังให้บริการ php 7.2 โดยใช้นามแฝง
- phpmyadmin => php 7.4 Apache Handler 2.0
- test1.me => php 7.2 CGI/FastCGI
บันทึกข้อผิดพลาดของ MySQL:
2021-10-02T04:26:59.472441Z 35 [หมายเหตุ] ยกเลิกการเชื่อมต่อ 35 ถึง db: avipac_dbproducts' ผู้ใช้: 'root' โฮสต์: 'localhost' (มีข้อผิดพลาดในการเขียนแพ็กเก็ตการสื่อสาร)
บันทึกข้อผิดพลาดของ Apache:
[วันศุกร์ที่ 01 ต.ค. 23:22:17.806390 2021] [cgi:error] [pid 3808:tid 1108] [client 127.0.0.1:61857] สคริปต์หมดเวลาก่อนที่จะส่งคืนส่วนหัว: php-cgi.exe ผู้อ้างอิง: http:// test1.me/
[Fri Oct 01 23:23:43.661155 2021] [cgi:error] [pid 3808:tid 1108] [client 127.0.0.1:61857] AH01215: PHP Fatal error: ขนาดหน่วยความจำที่อนุญาต 3221225472 ไบต์หมดแล้ว (พยายามจัดสรร 20480 ไบต์ ) ใน D:\webdev\Local\test1\control\classgeneric\class.managerdb.php ที่บรรทัด 111: C:/laragon/bin/php/php72/php-cgi.exe ผู้อ้างอิง: http ://test1.me/
[Fri Oct 01 23:23:43.676759 2021] [cgi:error] [pid 3808:tid 1108] [client 127.0.0.1:61857] AH01215: PHP Fatal error: ขนาดหน่วยความจำที่อนุญาต 3221225472 ไบต์หมดแล้ว (พยายามจัดสรร 65536 ไบต์ ) ใน Unknown ที่บรรทัด 0: C:/laragon/bin/php/php72/php-cgi.exe ผู้อ้างอิง: http://test1.me/
[Fri Oct 01 23:23:43.676759 2021] [cgi:error] [pid 3808:tid 1108] [client 127.0.0.1:61857] AH01215: PHP Fatal error: ขนาดหน่วยความจำที่อนุญาต 3221225472 ไบต์หมดแล้ว (พยายามจัดสรร 24576 ไบต์ ) ใน Unknown ที่บรรทัด 0: C:/laragon/bin/php/php72/php-cgi.exe ผู้อ้างอิง: http://test1.me/
[วันศุกร์ที่ 01 ต.ค. 23:24:59.451291 2021] [cgi:error] [pid 3808:tid 1104] [client 127.0.0.1:53918] สคริปต์หมดเวลาก่อนที่จะส่งคืนส่วนหัว: php-cgi.exe ผู้อ้างอิง: http:// test1.me/
ฉันยอมรับอย่างแน่นอนว่าแบบสอบถาม mysql นั้นค่อนข้างใหญ่สำหรับสภาพแวดล้อมในเครื่องบน Windows; แต่ปัญหาคือแบบสอบถามเดียวกันดำเนินการโดย apache handler 2.0 และ php 7.4 ในเวลาน้อยกว่า 1 วินาที ... แต่ใน CGI / FastCGI จะหยุดเมื่อหมดเวลา (180 วินาที / 3 นาที) ... ฉันมี ความละเอียดอ่อนของการตั้งค่าเดียวกันสำหรับ FastCGI และ Apache Handler 2.0 แต่ไม่น่าเป็นไปได้เพราะอันหนึ่งล้มเหลวและอีกอันไม่ทำ
แน่นอน นั่นเป็นเหตุผลว่าทำไมฉันถึงสงสัยว่าพวกเขาบอกฉันในการตั้งค่าของฉันว่าฉันต้องกำหนดค่าใดเพื่อปรับปรุง FastCGI มันเป็นสิ่งที่ฉันละเลยเป็นหลัก (ที่ไหน อย่างไร และอะไร)
เป็นไปได้ว่ามีคนบอกฉันในการตั้งค่าว่าฉันต้องปรับปรุง FastCGI อย่างไร มันเป็นสิ่งที่ฉันละเลยเป็นหลัก (ที่ไหน อย่างไร และอะไร) ฉันไม่เข้าใจจริงๆ ว่าทำไมฉันถึงทำ Fast CGI ไม่ได้ อย่างน้อยก็ไม่พังและทำงานเหมือน Apache ทำ ...
ฉันไม่รู้ว่ามีอะไรผิดปกติ ต้องการอะไร หรือแก้ไขข้อผิดพลาดเหล่านี้อย่างไร ...
ฉันรู้ว่า CGI / FastCGI ใช้เวลานานและใช้หน่วยความจำมาก แต่ฉันไม่รู้ว่าทำไมมันถึงไม่ทำงานและ Apache Handler ทำงานอย่างถูกต้อง
หรือมีวิธีใดในการพร็อกซี Apache Handler 2.0 แทนการใช้ php-cgi ผ่านนามแฝง FastCGI
ภาพประกอบ
อาปาเช่ตัวจัดการ 2.0:

CGI/เร็วCGI:


อัปเดต #1
ฉันพบไฟล์กำหนดค่านี้:
หมายเหตุ: ฉันคิดว่าไฟล์การกำหนดค่านี้มีความสำคัญ แต่ฉันไม่รู้ว่ามันทำงานอย่างไร หรือฉันควรเพิ่ม ลบ หรือแก้ไขอะไรเพื่อให้ FastCGI ทำงานเหมือนกับ Apache Handler 2.0
LoadModule fcgid_module "C:/laragon/etc/apache2/modules/mod_fcgid-2.3.10-win64-VS16.so"
<IfModule fcgid_module>
FcgidInitialEnv PATH "C:/laragon/bin/php/php74;C:/Windows/system32;C:/Windows;C:/Windows/System32/Wbem;"
FcgidInitialEnv SystemRoot "C:/Windows"
FcgidInitialEnv SystemDrive "C:"
FcgidInitialEnv TEMP "C:/Windows/Temp"
FcgidInitialEnv TMP "C:/Windows/อุณหภูมิ"
FcgidInitialEnv windir "C:/Windows"
# 10 ชม.: ในกรณีที่คุณเรียกใช้สคริปต์เป็นเวลานาน ให้เพิ่ม FcgidIOTimeout
FcgidIOTimeout 36000
FcgidIdleTimeout 36000
FcgidProcessLifeTime 36000
FcgidBusyTimeout 36000
FcgidConnectTimeout 3600
FcgidMaxRequestsPerProcess 0
FcgidMaxProcesses 50
FcgidMaxRequestLen 81310720
# ที่ตั้ง php.ini:
# FcgidInitialEnv PHPRC "C:/laragon/bin/php/php74"
FcgidInitialEnv PHP_FCGI_MAX_REQUESTS 0
<ไฟล์ ~ "\.php$>"
AddHandler fcgid-script .php
ตัวเลือก +ExecCGI
FcgidWrapper "C:/laragon/bin/php/php74/php-cgi.exe" .php
</ไฟล์>
</หากโมดูล>