Nginx在子文件夹中使用angular和codeigniter应用程序

时间:2016-08-22 16:02:26

标签: php codeigniter nginx url-rewriting vagrant

我试图在后端创建一个带有codeigniter的网站,并在前端创建angularjs。 对于后端,我使用nginx作为服务器。 目前我有正确配置nginx的问题。我想要实现的是将codeigniter和angularjs应用程序放在单独的文件夹中。我想要的是访问如下

    来自my_website.com/api的
  • codeigniter
  • 来自my_website.com的
  • angular

就文件夹而言,我希望将它们保留在:

  • codeigniter:/ var / www / html / api
  • angular:/ var / www / html / angular

到目前为止,我已经设法让它在同一个文件夹中运行。所以现在我在/ var / www / html中有codeigniter,而angular文件夹在同一个目录中。这样我可以从my_website.com/访问codeigniter,并从my_website.com/app访问角度,这不是我想要的。

我正在为nginx / etc / nginx / sites-available / default文件尝试多种不同的设置,但每次都有一些问题。最远的我得到的是将它们放在单独的文件夹中,但是codeigniter只能用于default_controller,我无法访问任何其他文件。 那是当前的工作配置。

server {
    listen 80;
    listen [::]:80 default_server ipv6only=on;

    root /var/www/html;

    server_name localhost;
    index index.php index.htm index.html;

    location /app/ {
        root /var/www/html/angular; 
        try_files $uri/ $uri index.html =404;
    }

    location / {
        try_files $uri $uri/ /index.php;
        #index index.html;
    }

    error_page 404 /404.html;

    error_page 500 502 503 504 /50x.html;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
        include fastcgi_params;
    }
}

这里是简单的配置,我只是尝试从demo子文件夹

运行codeigniter
server {
        listen       80;
        server_name  localhost;
        root   /var/www/html;
        autoindex on;
        index index.php;

        location / {

            #try_files $uri $uri/ /index.php;
                try_files $uri $uri/ /index.php$request_uri;
            location = /demo/index.php {
                try_files $uri $uri/ /index.php$request_uri;
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;

                fastcgi_param  SCRIPT_FILENAME /var/www/html/demo$fastcgi_script_name;
                include        fastcgi_params;
            }
        }

        location ~ \.php$ {
            return 444;
        }


}

这里my_website.com/demo/index.php工作正常,但my_website.com/demo/index.php/welcome显示 500内部服务器错误

我希望我能说清楚。 我在网上尝试了很多不同的配置,但我总是遇到一些麻烦。您能否为这个问题提出一些简单的解决方案?

谢谢, Mateusz

1 个答案:

答案 0 :(得分:1)

我终于设法让它按照我想要的方式工作。我已经使用此解决方案link使其与子目录中的codeigniter一起使用,这是主要问题。这是我的配置:

server {
    listen       80;
    server_name  localhost;
    root   /var/www/html;
    autoindex on;
    index index.html;

    location / {
        root /var/www/html/angular; 
        try_files $uri/ $uri index.html =404;
    }

    location /api/ {
            alias  /var/www/html/api/;
            try_files $uri $uri/ /api/index.php;

            location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                fastcgi_index   index.php;
                fastcgi_pass    unix:/var/run/php/php7.0-fpm.sock;
                include /etc/nginx/fastcgi_params;
                fastcgi_param   SCRIPT_FILENAME $request_filename;
        }
    }

    location ~ \.php$ {
        return 444;
    }
}

感谢@FrédéricHenri建议使用/var/log/nginx/*.log下的日志文件,这有助于跟踪nginx重定向请求的方式。我遇到的也是网络浏览器正在缓存网站(我认为这就是发生的事情)所以当我对配置文件进行一些更改时,这给了我错误的结果。