在將 codeigniter Web 應用程式部署到 Amazon AWS EC2 實體并將其配置為 SSL/TLS 時,我似乎遇到了一個常見問題。
該應用程式在 Amazon Linux 2 AMI (HVM) 實體上運行。
Web 應用程式在 HTTP 下運行良好,即基本 URL 將使用默認路由加載 index.php。codeigniter 路由都可以正常呼叫控制器函式并加載相應的視圖,并且頁面上使用 AJAX 呼叫控制器函式的任何函式都可以正常作業。
嘗試使用 HTTPS 時,基本 URL 將使用默認路由加載 index.php,但是在將路由添加到 URL 末尾時,我遇到 404 not found 錯誤。
Not Found
The requested URL was not found on this server.
頁面上使用 AJAX 呼叫控制器函式的任何函式也是如此:
Request URL: https://www.mysite.co.uk/Home/test_fn
Request Method: POST
Status Code: 404 Not Found
Remote Address: xx.xxx.xxx.xx:443
Referrer Policy: strict-origin-when-cross-origin
我一直在關注這里的指南:https : //docs.aws.amazon.com/AWSEC2/latest/UserGuide/SSL-on-amazon-linux-ami.html并擁有:
- 啟用 mod_ssl
- 使用 Route 53 為我的域設定 DNS 記錄
- 擁有 CA 簽名證書(來自 ZeroSSL 的 90 天證書)
- 將證書放在 /etc/pki/tls/certs
- 將密鑰放在 /etc/pki/tls/private
- 相應地更新了 ssl.conf 中的 SSLCertificateFile 和 SSLCertificateKeyFile
在瀏覽器中加載 HTTPS ( https://www.mysite.co.uk )下的索引頁面可以正常作業。所有元素都已加載(css 和影像),我在地址欄中看到關閉的掛鎖符號。單擊它表明連接是安全的并且證書是有效的,因此看起來那里的配置是確定的。
此外:
- 我已經用埠 443 的條目更新了虛擬主機:
<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot "/var/www/html/myApp"
ServerName https://www.mysite.co.uk/
<Directory "/var/www/html/myApp">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
<VirtualHost *:443>
ServerAdmin [email protected]
DocumentRoot "/var/www/html/myApp"
SSLEngine on
SSLCertificateFile "/etc/pki/tls/certs/certificate.crt"
SSLCertificateKeyFile "/etc/pki/tls/private/private.key"
ServerName https://www.mysite.co.uk/
<Directory "/var/www/html/myApp">
Options Indexes FollowSymLinks Includes ExecCGI
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
.htaccess 檔案如下:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$0 [L]
</IfModule>
我已經嘗試了帶有 base_url 設定的 config.php 檔案:
$config['base_url'] = 'https://www.mysite.co.uk';
與原版相反
$config['base_url'] = 'http://www.mysite.co.uk';
index_page 和 uri_protocol 的值為:
$config['index_page'] = '';
$config['uri_protocol'] = 'REQUEST_URI';
控制器名稱的首字母大寫,并且由于在 linux 環境中使用 HTTP,我可以忽略區分大小寫的問題。同樣,由于路由在 HTTP 下作業,我不認為 routes.php 檔案有問題:
$route['default_controller'] = 'Home';
$route['home'] = 'Home';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;
$route['companies'] = 'Company_c/view_companies';
$route['users'] = 'User_c/view_users';
$route['layers'] = 'Layer_c/view_layers';
我已經為 .htaccess 檔案嘗試了許多排列。
我確定我在某處遺漏了一些東西,但他過去幾天一直在兜圈子,但無濟于事。
沿線某處有什么明顯的我錯過了嗎?非常感謝任何幫助。
uj5u.com熱心網友回復:
我在一個新的 beanstalk 實體上部署了一個帶有自定義域的新 CI4。我用的是亞馬遜證書。沒用過 SSH。全部通過網路界面完成。
只有我在 codeigniter 上所做的更改
- 復制
.htaccess并index.php從/public根檔案夾 - 改變
$pathsConfig在index.php以點專案子檔案夾 - 改變
$baseURL中Config\App.php,并加入https://
這應該沒有問題。
我懷疑 ssl 配置不正確,它指向另一個虛擬主機或默認的 apache 目錄。
嘗試在根檔案夾中創建一個常規檔案/test.php并嘗試訪問它。如果您仍然收到 404 錯誤,那么您的虛擬主機配置已損壞。
uj5u.com熱心網友回復:
感謝@Ergec,它看起來確實像一個虛擬主機問題。它無法正確獲取 vhost.conf 檔案。
將埠 443 的虛擬主機部分添加到 httpd.conf 的末尾并重新啟動服務就可以了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/405223.html
標籤:
