Serving multiple sites on the same domain

2019-09-20 01:57发布

I'm new at deploying, and basically this is the first time i get in touch with it. Short about application structure:

I have three parts:

  • api.app.dev/ - which is written in Lumen,
  • app.dev/backend/ - basic PHP middleware, used to keep API token and user data,
  • app.dev/ - which is front-end (JS).

I'm using nginx. I spent so much time trying to set it up. The problem is that at app.dev/ i have /template folder where PHP templates are stored. At app.dev/backend/ i have just one page which processing request before it comes to API. How configuration should looks like?

I successfully configured API. Front-end works for now, but i can't test it.

But can't get back-end part working. There is current configuration:

app.dev/backend

server {

    # Port that the web server will listen on.
    listen         80;

    # Host that will serve this project.
    server_name     hr.dev/backend;

    # Useful logs for debug.


    access_log      /var/log/nginx/access-hr-backend.log main;
    error_log       /var/log/nginx/error-hr-backend.log;
    rewrite_log     on;

    # The location of our projects public directory.
    root            /var/www/hr_app/git_repository/backend;

    index           page.php;


    location / {
    add_header Access-Control-Allow-Origin "http://hr.dev";
    add_header Access-Control-Allow-Credentials true;

        # URLs to attempt, including pretty ones.
        try_files  $uri/ /page.php?$query_string;

    }

    # Remove trailing slash to please routing system.
    if (!-d $request_filename) {
        rewrite     ^/(.+)/$ /$1 permanent;
    }

    # PHP FPM configuration.
    location ~* \.php$ {

            add_header Access-Control-Allow-Origin "http://hr.dev";
        add_header Access-Control-Allow-Credentials true;
            fastcgi_pass                    unix:/var/run/php/php7.1-fpm.sock;
            fastcgi_index                   page.php;
            fastcgi_split_path_info         ^(.+\.php)(.*)$;
            include                         /etc/nginx/fastcgi_params;
            fastcgi_param                   SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    # We don't need .ht files with nginx.
    location ~ /\.ht {
            deny all;
    }

    location ~ \.css {
        add_header  Content-Type    text/css;
        add_header Access-Control-Allow-Origin *;

    }

    location ~ \.js {
        add_header  Content-Type    application/x-javascript;
        add_header Access-Control-Allow-Origin *;

    }


    # Set header expirations on per-project basis
    location ~* \.(?:ico|css|js|jpe?g|JPG|png|svg|woff)$ {
            add_header Access-Control-Allow-Origin *;

            expires 365d;

    }



}

How do back-end part is accessed? - It's accessed via front-end. AJAX request is sent to URL below. When i try to access: app.dev/backend/?action=1123 i get 404 page not found. On localhost everything works like charm. I develop with PHP internal server, and that was a BIG mistake!

标签: php nginx
1条回答
男人必须洒脱
2楼-- · 2019-09-20 02:20

Ok, i solved my problem by a lot of googling and trying. There are vhosts:

api.app.dev

server {

    # Port that the web server will listen on.
    listen          80;

    # Host that will serve this project.
    server_name     api.app.dev;

    # Useful logs for debug.
    access_log      /var/log/nginx/access-hr-api.log main;
    error_log       /var/log/nginx/error-hr-api.log;
    rewrite_log     on;

    # The location of our projects public directory.
    root            /var/www/app/api/public;

    # Point index to the Laravel front controller.
    index           index.php;



    location / {

        # URLs to attempt, including pretty ones.
        add_header Access-Control-Allow-Origin *;
        try_files   $uri $uri/ /index.php?$query_string;

    }

    # Remove trailing slash to please routing system.
    if (!-d $request_filename) {
        rewrite     ^/(.+)/$ /$1 permanent;
    }

    # PHP FPM configuration.
    location ~* \.php$ {

        add_header Access-Control-Allow-Origin *;

        fastcgi_pass                    unix:/var/run/php/php7.1-fpm.sock;
        fastcgi_index                   index.php;
        fastcgi_split_path_info         ^(.+\.php)(.*)$;
        include                         /etc/nginx/fastcgi_params;
        fastcgi_param                   SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    # We don't need .ht files with nginx.
    location ~ /\.ht {
            deny all;
    }

    # Set header expirations on per-project basis
    location ~* \.(?:ico|css|js|jpe?g|JPG|png|svg|woff)$ {
            expires 365d;

    }

}

app.dev/ ( && app.dev/backend/)

server {

    # Port that the web server will listen on.
    listen         80;

    # Host that will serve this project.
    server_name     app.dev;

    # Useful logs for debug.

    root /var/www/app;
    index index.html page.php;

    access_log      /var/log/nginx/access-hr.log main;
    error_log       /var/log/nginx/error-hr.log;
    rewrite_log     on;


    location /backend {
          add_header Test "location /backend ";
          add_header Access-Control-Allow-Origin "http://hr.dev";
          add_header Access-Control-Allow-Credentials true;
          alias /var/www/app/backend;

          # URLs to attempt, including pretty ones.
          try_files  $uri/ /page.php?$query_string;
    }


    location / {
         add_header Test "location / in frontent";
         add_header Test "location / in frontend vhost";
         add_header Access-Control-Allow-Origin "app.dev";
         add_header Access-Control-Allow-Credentials true;
         root /var/www/app/frontend;
         index index.html;
         proxy_http_version 1.1;
         proxy_set_header Upgrade $http_upgrade;
         proxy_set_header Connection 'upgrade';
         proxy_set_header Host $host;
         proxy_cache_bypass $http_upgrade;
         index index.html;

    }


    # Remove trailing slash to please routing system.
    if (!-d $request_filename) {
        rewrite     ^/(.+)/$ /$1 permanent;
    }


     location  /frontend/template {
         alias /var/www/app/frontend;
     }

    # PHP FPM configuration.
    location ~* \.php$ {
          add_header Test "location php in backend ";
          add_header Access-Control-Allow-Origin "http://app.dev";
          add_header Access-Control-Allow-Credentials true;
          fastcgi_pass                     unix:/var/run/php/php7.1-fpm.sock;
          fastcgi_index                   index.php;
          fastcgi_split_path_info    ^(.+\.php)(.*)$;
          include                            /etc/nginx/fastcgi_params;
          fastcgi_param                  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    # We don't need .ht files with nginx.
    location ~ /\.ht {
        add_header Test "location ht in backend ";
        deny all;
    }

    location ~ \.css {
        add_header Test "location css in hr.dev";
        add_header  Content-Type    text/css;
        add_header Access-Control-Allow-Origin *;
        root /var/www/app/frontend;

    }

    location ~ securimage.js {
        add_header  Content-Type    application/x-javascript;
        root /var/www/app;

    }
    location ~ \.js {
        add_header Test "location js in hr.dev";
        add_header  Content-Type    application/x-javascript;
        add_header Access-Control-Allow-Origin *;
        root /var/www/app/frontend;

    }


    # Set header expirations on per-project basis
    location ~* \.(?:ico|jpe?g|JPG|png|svg|woff)$ {
            add_header Test "location ico,js,jpeg... in backend";
            add_header Access-Control-Allow-Origin *;
            expires 365d;

    }

}
查看更多
登录 后发表回答