Cấu hình sub-folder trong nginx

Devops

Xin chào tất cả mọi người, hôm nay gsviec sẽ chia sẽ cho các bạn một chia sẽ về cách cấu hình các dự án php chạy cùng một domain với các thư mục web app khác nhau.

Ví dụ cụ thể là tôi có domain gsviec.com, với thư mục webroot là /var/www/phalcon, bởi vì gsviec.com tôi viết trên framework phalconphp nên tôi đặt vậy cho dễ nhớ.

về cấu hình nginx và phalcon xem tại đây https://docs.phalcon.io/3.4/en/webserver-setup

Rồi kế đế tôi muốn chạy một blog trên nền tảng wordpress, với domain gsviec.com/blog thì tôi sẽ có thư mục /var/www/blog. Và cuối cùng là trang web đăng tin việc làm với domain gsviec.com/jobs/ thì sẽ có thư mục web là /var/ww/jobs.

Cái dự án này tôi viết trên laravel do đó bạn có thể coi cấu hình https://laravel.com/docs/8.x/deployment

Nginx alias

Thông thường với từng thư mục dự án thì chúng ta dễ dàng cấu hình, theo hướng dẫn của mỗi framework php, nhưng khi gọp chung lại thì thì chúng ta sẽ cần phải dùng alias trong nginx, tức là ta thây đổi:

root /var/www/blog => alias /var/www/blog
if (!-e $request_filename) { rewrite ^ /blog/index.php last; }

Chỉ có thế thôi, dưới đây là ví dụ đầy đủ cho cấu hình cho các trường hợp của website gsviec của chúng tôi

server {
    listen 80 default_server;
    server_name _;
    root /var/www/phalcon;
    index index.php index.html;
    sendfile off;

    location / {
         try_files $uri $uri/ /index.php?_url=$uri&$args;
    }
    location ^~ /jobs {
        alias /var/www/jobs;
        if (!-e $request_filename) { rewrite ^ /jobs/index.php last; }
        location ~* \.php(/|$) {
            fastcgi_pass  127.0.0.1:9000;
            fastcgi_split_path_info ^(.+\.php)(/.*)$;
            fastcgi_param SCRIPT_FILENAME $request_filename;
            include fastcgi_params;
        }
        location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
            expires 5d;
        }
    }

    location ^~ /blog {
        alias /var/www/blog;
        if (!-e $request_filename) { rewrite ^ /blog/index.php last; }
        location ~* \.php(/|$) {
            fastcgi_pass  127.0.0.1:9000;
            fastcgi_split_path_info ^(.+\.php)(/.*)$;
            fastcgi_param SCRIPT_FILENAME $request_filename;
            include fastcgi_params;
        }
        location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
            expires 5d;
        }
    }



    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ [^/]\.php(/|$) {
        #try_files $uri =404;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index /index.php;

        include /etc/nginx/fastcgi_params;
        fastcgi_read_timeout 600s;
        fastcgi_split_path_info       ^(.+\.php)(/.+)$;
        fastcgi_param PATH_INFO       $fastcgi_path_info;
        fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
        expires 5d;
    }

    # deny access to . files, for security
    #
    location ~ /\. {
        log_not_found off;
        deny all;
    }
}

Kết luận

Trên đây là kinh nghiệm của tôi khi làm việc nginx với các dự án php, nếu bạn nào có kinh nghiệm hay hơn hãy để bình luận bên dưới cho mọi người tham khảm.