资讯专栏INFORMATION COLUMN

docker - nginx - proxy_pass + proxy_redirect

jhhfft / 486人阅读

摘要:目的使项目域名变为,仍然可以正常访问。后还想到,我自己用的环境测试环境上不是,那么根本不是我的容器地址。如果要连接,需要用到的容器名称。所以实际上,容器本地地址其实就是的端口。最后,删除了中的后配置成功了。

目的:使项目域名 www.foo.test(/index.php)/controller/action 变为 www.foo.test/project/controller/action,仍然可以正常访问。(非index.php二级目录的URL重写)

背景:

           Name                          Command              State                   Ports                 
------------------------------------------------------------------------------------------------------------
laradock_docker-in-docker_1   dockerd-entrypoint.sh           Up      2375/tcp                              
laradock_mysql_1              docker-entrypoint.sh mysqld     Up      0.0.0.0:3306->3306/tcp                
laradock_nginx_1              nginx                           Up      0.0.0.0:443->443/tcp,                 
                                                                      0.0.0.0:80->80/tcp                    
laradock_php-fpm_1            docker-php-entrypoint php-fpm   Up      9000/tcp                              
laradock_workspace_1          /sbin/my_init                   Up      0.0.0.0:2222->22/tcp 

foo.conf 配置为

server {

    listen 80;
    listen [::]:80;

    server_name www.foo.test;
    root /var/www/foo/web;
    index index.php index.html index.htm;

    location / {
         try_files $uri $uri/ /index.php$is_args$args;
    }
    
    location ~ .php$ {
        #try_files $uri /index.php =404;
        fastcgi_pass php-upstream;
        fastcgi_index index.php;
        #fastcgi_buffers 16 16k;
        #fastcgi_buffer_size 32k;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        #fixes timeouts
        #fastcgi_read_timeout 600;
        include fastcgi_params;
    }

    location ~ /.ht {
        deny all;
    }

    location /.well-known/acme-challenge/ {
        root /var/www/letsencrypt/;
        log_not_found off;
    }

    error_log /var/log/nginx/laravel_error.log;
    access_log /var/log/nginx/laravel_access.log;
}

解决:

foo.conf 配置里添加

location /project {
        proxy_pass http://127.0.0.1/;
        proxy_redirect http://127.0.0.1/ /project;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

访问 www.foo.test/project/controller/action,成功。

总结:

一开始,同事给我发了一份测试服务器上的配置,

location /project {
         proxy_pass http://127.0.0.1:9000/;
         proxy_redirect http://127.0.0.1:9000/ /project;
         proxy_set_header Host $host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header REMOTE-HOST $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

可我按这个配置写入我本的 nginx 的配置时,死活不行。后还想到,我自己用的docker环境(测试环境上不是),那么 127.0.0.1 根本不是我的 php-fpm容器地址。如果要连接,需要用到php-fpm的容器名称。

所以实际上,nginx容器本地地址 127.0.0.1:80 其实就是 php-fpm9000端口。

最后,删除了 proxy_pass http://127.0.0.1:9000/; 中的 9000后配置成功了。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/40070.html

相关文章

  • docker - nginx - proxy_pass + proxy_redirect

    摘要:目的使项目域名变为,仍然可以正常访问。后还想到,我自己用的环境测试环境上不是,那么根本不是我的容器地址。如果要连接,需要用到的容器名称。所以实际上,容器本地地址其实就是的端口。最后,删除了中的后配置成功了。 目的:使项目域名 www.foo.test(/index.php)/controller/action 变为 www.foo.test/project/controller/act...

    MartinDai 评论0 收藏0
  • docker容器间通信的一种方法

    摘要:是容器中的一条,是由参数添加进来的。补充容器重启后可能变化,所以直接在中指定并不是一个好方法。使用时文件会随着容器的变化更新,所以使用域名才是更容易维护的方法。 转载请注明出处,原文链接http://tailnode.tk/2017/01/do... 以我的ghost博客为例进行说明,我在VPS上用docker启动了两个ghost博客,还有一个Nginx做反向代理,将两个域名分别指向两...

    bergwhite 评论0 收藏0
  • 使用Rancher-Gen动态更新配置文件

    摘要:在这些部署工作完成之后,的配置需要更改为指向新的后端容器。这允许用户为现有的并基于这些变化的服务生成配置文件。下面的教程会介绍如何自动生成运行博客平台后端服务的配置文件。第步部署服务为简单起见,我们打算使用中的官方镜像。 Docker和Rancher让大家能更轻易地部署和管理基于微服务的应用程序。然而,如果有些服务是依赖于其他动态服务的,那该如何管理它们的配置?你是否时常觉得,要是有方...

    lykops 评论0 收藏0
  • nginxproxy_redirect

    摘要:语法默认配置块当上游服务器返回的响应是重定向或刷新请求如响应码是或者时,可以重设头部的或字段。 proxy_redirect 语法:proxy_redirect [ default|off|redirect replacement ];默认:proxy_redirect default;配置块:http、server、location当上游服务器返回的响应是重定向或刷新请求(如HTTP...

    xuexiangjys 评论0 收藏0
  • Golang项目部署

    摘要:配置示例如下其中,为本地的应用监听端口。编译程序跨平台交叉编译是的特点之一,可以非常方便地编译出我们需要的目标服务器平台的版本,而且是静态编译,非常方便地解决了运行依赖问题。 文章来源:https://goframe.org/deploymen... 一、独立部署 使用GF开发的应用程序可以独立地部署到服务器上,设置为后台守护进程运行即可。这种模式常用在简单的API服务项目中。 服务器...

    Tamic 评论0 收藏0

发表评论

0条评论

jhhfft

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<