在同一个域上提供多个站点

时间:2017-10-09 09:00:03

标签: php nginx

我是部署新手,基本上这是我第一次接触它。简短的应用程序结构:

我有三个部分:

  • api.app.dev/ - 用Lumen编写,
  • app.dev/backend/ - 基本的PHP中间件,用于保存API令牌和用户数据,
  • app.dev/ - 这是前端(JS)。

我正在使用nginx。 我花了很多时间试图设置它。问题是在app.dev/我有/template文件夹,其中存储了PHP模板。 在app.dev/backend/我只有一页处理请求 在谈到API之前。配置应该如何?

我成功配置了API。前端现在可以使用,但我无法测试它。

但无法让后端部分正常工作。目前有配置:

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;

    }



}

如何访问后端部分? - 它通过前端访问。 AJAX请求发送到下面的URL。 当我尝试访问时:app.dev/backend/?action=1123我得到404 page not found。 在localhost上,一切都像魅力一样。我用PHP内部服务器开发,这是一个很大的错误!

1 个答案:

答案 0 :(得分:0)

好的,我通过大量的谷歌搜索和尝试解决了我的问题。有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;

    }

}