Nginx - работа с несколькими установками codeigniter
У меня есть сервер Nginx (1.6) с PHP-FPM на моем локальном сервере. У меня в папке "/var/www/" несколько веб-приложений, например site01, site02...
Мои приложения используют CodeIgniter.
Я хочу, чтобы /var/www/site01 вызывался в местоположении по умолчанию, и /var/www/site02 вызывался при переходе:
http://server/site02.
Вот мой nginx default.conf:
сервер {слушай 80; имя_сервера localhost; access_log off; client_body_buffer_size 1M; proxy_max_temp_file_size 0; disable_symlinks off;
# Site 01
location / {
root /var/www/site01;
index index.html index.php index.htm;
try_files $uri $uri/ /index.php;
location = /index.php {
fastcgi_pass 127.0.0.1:9000;
fastcgi_read_timeout 10000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_buffer_size 16K;
fastcgi_buffers 256 16k;
include fastcgi_params;
}
}
# Site 2
location /site02 {
root /var/www/;
index index.htm;
try_files $uri $uri/ /index.php;
location ~ ^/site02/index.php {
try_files $uri =404;
root /var/www/;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_read_timeout 10000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_buffer_size 16K;
fastcgi_buffers 256 16k;
include /etc/nginx/fastcgi_params;
}
}
У меня есть несколько ошибок, во-первых, когда я не помещаю "index.php" в URL моего site02, у меня возникает ошибка 403. Тогда я не могу перейти ни на один контроллер, он перенаправляет меня на /site01.
Каков наилучший способ обработки нескольких папок приложений PHP? Почему у меня есть эти перенаправления? Благодарю.
5 ответов
У меня также была такая же проблема, когда я разрабатывал 2 приложения CodeIgniter на одном сервере Nginx. код ниже работал для меня
server {
listen 80;
listen [::]:80;
root /var/www/html/;
server_name example.com;
# Site 01
location /site1 {
alias /var/www/html/site1/;
index index.htm index.php;
try_files $uri $uri/ /site1/index.php;
}
# Site 2
location /site2 {
alias /var/www/html/site2/;
index index.htm index.php;
try_files $uri $uri/ /site2/index.php;
}
error_page 404 /error/404.php;
fastcgi_intercept_errors on;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
}
Сначала я вижу в вашей второй конфигурации сайта:
location /site02 {
root /var/www/;
index index.htm;
ИЗМЕНИТЬ В:
location /site02 {
root /var/www/;
index index.php index.htm;
нужен index.php
Хорошо, трудно решить! Но это работает для меня:
location /site02 {
root /var/www/;
index index.php index.htm;
try_files $uri $uri/ /site02/index.php;
location ~ ^/site02/(.+\.php)$ {
root /var/www;
try_files $uri $uri/ /site02/index.php;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_read_timeout 10000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_buffer_size 16K;
fastcgi_buffers 256 16k;
include fastcgi_params;
}
}
server {
listen 80;
server_name themainwebsite.test *.themainwebsite.test;
root "C:/laragon/www/themainwebsite";
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php$is_args$args;
autoindex on;
}
# Site 2
location /admin-dashboard{
alias "C:/laragon/www/borneotropicalstream/admin-dashboard";
index index.php index.htm ;
try_files $uri $uri/ /admin-dashboard/index.php;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass php_upstream;
#fastcgi_pass unix:/run/php/php7.0-fpm.sock;
}
charset utf-8;
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
# deny the .htaccess file if exist
location ~ /\.ht {
deny all;
}
location ~ /admin-dashboard\.ht {
deny all;
}
}
Это моя конфигурация. Я поместил свою страницу администратора (созданную с помощью Codeigniter v3) в основной проект codeigniter v3. Я использую Windows 10 и Laragon ( https://laragon.org) для управления веб-сервером с помощью PHP v7.4 и Nginx v1.22.0. Я думаю, что эту конфигурацию можно реализовать и в другой операционной системе.
РЕДАКТИРОВАТЬ: извините, попробуйте это: ROOT /var/www, если nginx настроен с этим путем
server{
......
......
root /var/www/;
index index.html index.php index.htm;
location / {
try_files $uri $uri/ /index.php;
}
# Site 1
location /site01 {
.....your parameters here...
}
# Site 2
location /site02 {
.....your parameters here...
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_read_timeout 10000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_buffer_size 16K;
fastcgi_buffers 256 16k;
include fastcgi_params;
}
}
дополнительные настройки доступны в вики nginx ( http://wiki.nginx.org/ServerBlockExample), пожалуйста, посмотрите