【问题标题】:How can i configure apache server to Proxy to http://localhost:3000/ and exclude some URL?如何将 apache 服务器配置为代理到 http://localhost:3000/ 并排除某些 URL?
【发布时间】:2019-09-24 16:52:17
【问题描述】:

我希望我的 Laravel 使用客户端 Nuxt JS 并使用 Laravel 作为后端管理面板和 api。

这是我将 Laravel 项目代理到 Nuxt JS 的代码,但它不能正常工作。

<VirtualHost *:80>
    ServerName nuxt.local

    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html/nuxt/public

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

    ProxyPassMatch /^(admin-panel)(.*)$ !

    ProxyPass / http://localhost:3000/
    ProxyPassReverse / http://localhost:3000/
    ProxyPreserveHost on
    LogLevel debug
 </VirtualHost>

我想排除“管理面板”和“api”路由访问代理。

【问题讨论】:

    标签: php regex apache proxy ubuntu-18.04


    【解决方案1】:
    • 您可能希望在您的 apache 目录中找到您的 httpd.conf。然后,制作一份原件并保留。
    • 然后,搜索VirtualHost,你可能会发现类似:

    <VirtualHost *:3000>
       ServerAdmin localhost
        DocumentRoot "/var/www/html/nuxt/public"
        ServerName localhost
    
        ProxyRequests On
        ProxyPreserveHost On
        ProxyPass / http://127.0.0.1:3000/
    
        <Directory "/var/www/html/nuxt/public">
            Options Indexes FollowSymLinks MultiViews
            MultiviewsMatch Any
            AllowOverride All
            Require all granted
        </Directory>
    </VirtualHost>
    

    随心所欲地进行更改。在添加之前,您可能需要确保这是正确的:

    ProxyPassMatch /^(admin-panel)(.*)$ !
    

    也许,你想要这样的东西:

    ProxyPassMatch ^(admin-panel)(.*)$ http://localhost:3000/
    

    在httpd.conf 中的每个更改之后,您可能需要重新启动 apache 并测试它是否可以工作。

    【讨论】:

      【解决方案2】:

      我已经解决了问题

      我正在发布我的 apache2 配置代码。可能这对任何人都有帮助。

      <VirtualHost *:80>
      
        ServerName blog.net
      
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/blog/public
      
        <LocationMatch "/"> 
          allow from all 
          Satisfy any 
          ProxyPass http://localhost:3000/
          ProxyPassReverse http://localhost:3000/
        </LocationMatch>
      
        <LocationMatch "/admin-panel/*"> 
          allow from all 
          Satisfy any 
          ProxyPass http://localhost/blog/public
          ProxyPassReverse http://localhost/blog/public
        </LocationMatch>
      
        <LocationMatch "/admin/*"> 
          allow from all 
          Satisfy any 
          ProxyPass http://localhost/blog/public
          ProxyPassReverse http://localhost/blog/public
        </LocationMatch>
      
        <LocationMatch "/api/*"> 
          allow from all 
          Satisfy any 
          ProxyPass http://localhost/blog/public
          ProxyPassReverse http://localhost/blog/public
        </LocationMatch>
      
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
      
      </VirtualHost>
      

      并在 laravel routes/web.php 文件中写入

      \URL::forceRootUrl(env('APP_URL'));
      

      使用项目 URL 而不是代理 URL

      【讨论】:

        【解决方案3】:

        不要使用ProxyPassMatch 指令,而是尝试从您的代理通行证中排除每个网址:

        ProxyPass / http://localhost:3000/
        ProxyPass /admin-panel !
        ProxyPass /api !
        

        可能还有一种方法可以将它们与正则表达式组合成一行,例如:ProxyPass ^/(admin-panel|api)(.*)$ !

        【讨论】:

        • 谢谢,但在这种情况下,我的管理面板 url 不起作用
        • @NitinSinghNaruka 当然不行,你要求排除 admin-panel 路由。如果您从 Apache conf 中删除 ProxyPass /admin-panel !,它将再次起作用。
        • 我的意思是管理面板没有使用 Laravel 处理
        猜你喜欢
        • 2012-09-13
        • 1970-01-01
        • 2019-08-21
        • 2019-07-07
        • 1970-01-01
        • 1970-01-01
        • 2011-01-01
        • 2016-08-05
        • 1970-01-01
        相关资源
        最近更新 更多