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), пожалуйста, посмотрите

Другие вопросы по тегам