Apache2 React 应用程序 + laravel REST API 在同一个域上

Apache2 React 应用程序 + laravel REST API 在同一个域上

所以我的目标是我的域名为example.com conf,例如.com

<VirtualHost *:80>
        ServerName example.com
        ServerAlias www.example.com
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www/public_frontend
        <Directory "/var/www/public_frontend">
                Options Indexes FollowSymLinks
                AllowOverride All
                Require all granted
                RewriteEngine on
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

RewriteEngine On
RewriteCond %{SERVER_PORT} !443
RewriteRule ^(/(.*))?$ https://%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>

^ 此 conf 用于我的 react 应用程序,其中包含一个 .htaccess 文件:

<IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteBase /
 RewriteCond %{REQUEST_FILENAME} !-f
 RewriteCond %{REQUEST_FILENAME} !-d
 RewriteCond %{REQUEST_FILENAME} !-l
 RewriteRule ^.*$ / [L,QSA]
</IfModule>

我有我的 laravel 后端层,它在我的应用程序中被引用,因为localhost:8000这里是它的 conf 文件

Listen 8000

<VirtualHost *:8000>
       
        ServerName example.com
        ServerAlias localhost

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/api/public

        <Directory "/var/www/api/public">
                Options FollowSymLinks Indexes MultiViews
                AllowOverride All
                Order allow,deny
                Require all granted
                RewriteEngine On
        </Directory>


        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

Laravel API 的 .htaccess

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Send Requests To Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
    RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>

Mysql正确安装,Laravel正确安装

我的问题如下:我的反应应用程序请求超时。

Error: timeout of 5000ms exceeded
    createError createError.js:16
    handleTimeout xhr.js:96

编辑:如果我在本地启动我的开发服务器并尝试我的 APACHE 服务器,它会向我的本地机器上的本地主机发出请求。

如何将 apache2 对 localhost 的请求绑定到实际的 localhost?

netstat 输出

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:xxxx            0.0.0.0:*               LISTEN
tcp6       0      0 :::443                  :::*                    LISTEN
tcp6       0      0 :::8000                 :::*                    LISTEN
tcp6       0      0 :::33060                :::*                    LISTEN
tcp6       0      0 :::3306                 :::*                    LISTEN
tcp6       0      0 :::80                   :::*                    LISTEN

附言:我将这个问题留待解决,但我最终使用了 nginx。有人指出,我的情况应该可以使用 mod_proxy 来实现。

答案1

您有一个基于名称的 VirtualHost 配置,即当请求到达端口 8000 时,您提供了一个准备为 laravel.api (ServerName) 或www.laravel.api(服务器别名)。

但是,您的应用程序似乎使用了 http://localhost:8000。我建议您尝试将 localhost 添加为 ServerAlias,并检查它是否有效。

此外,您还包含了一些重写指令,用于“example.com”是 SERVER_NAME 的情况。如果您要通过 laravel.api 或www.laravel.api

答案2

我最终使用了 Nginx,对于新手来说,它更易于设置服务器。但我真的想学习 Apache,而这是我无法解决的障碍。

相关内容