【问题标题】:Serving multiple sites on the same domain为同一域上的多个站点提供服务
【发布时间】:2018-03-20 10:19:18
【问题描述】:

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

我有三个部分:

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

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

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

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

app.dev/后端

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 内部服务器开发,这是一个很大的错误!

【问题讨论】:

  • “不能让后端部分工作”。究竟是什么不工作?它有什么问题?你没有告诉我们问题是什么。
  • @ADyson 很抱歉信息丢失,但你可以写这个,不投反对票...
  • 首先是什么让你确定我投了反对票?可以是任何人。碰巧,这次是我,是的。我可以发表评论,但人们对否决票的反应更加积极......无论如何,一旦有足够的信息,我很乐意撤回它。否决票是因为缺乏明确性,根据 SO,这是一个合理的理由。无论如何......一个单一的 URL 上的 404 并不是足够的证据。对 app.dev/backend 的所有访问都会导致 404 吗?还是只有那个?您是否检查过一切都已正确部署?您的代码在其他环境中是否正常工作?
  • @ADyson :) 我知道,我知道 :) 但请记住,权限也会降级。信息已更新。
  • 根据您的问题,您有两个域api.app.devapp.dev - 后一个域同时支持/ 位置和/backend 位置。 //backend 位置的所有配置都应出现在 same server 块中,并带有 server_name app.dev; 指令。

标签: php nginx


【解决方案1】:

好的,我通过大量的谷歌搜索和尝试解决了我的问题。有虚拟主机:

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;

    }

}

【讨论】:

    猜你喜欢
    • 2019-06-10
    • 2017-05-22
    • 2014-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    • 2021-10-30
    相关资源
    最近更新 更多