Nginx + Django + Phpmyadmin 配置

Posted

技术标签:

【中文标题】Nginx + Django + Phpmyadmin 配置【英文标题】:Nginx + Django + Phpmyadmin Configuration 【发布时间】:2012-10-24 12:04:58 【问题描述】:

我已将服务器迁移到 amazon ec2,并尝试在那里设置以下环境:

nginx 在前端提供静态内容,传递给 django 获取动态内容。我也想在这个设置中使用 phpmyadmin。

我不是服务器管理员,所以我只是按照一些教程来让 nginx 和 django 启动并运行。但是我已经工作了两天,试图将 phpmyadmin 挂接到此设置,但无济于事。我现在正在发送我当前的服务器配置,我如何在这里为 phpmyadmin 提供服务?

server 
    listen   80;
    server_name localhost;

    access_log /opt/django/logs/nginx/vc_access.log;
    error_log  /opt/django/logs/nginx/vc_error.log;

    # no security problem here, since / is always passed to upstream
    root /opt/django/;
    # serve directly - analogous for static/staticfiles
    location /media/ 
        # if asset versioning is used
        if ($query_string) 
            expires max;
        
    
    location /admin/media/ 
        # this changes depending on your python version
        root /path/to/test/lib/python2.7/site-packages/django/contrib;
    
    location /static/ 
        # if asset versioning is used
        if ($query_string) 
            expires max;
        
    
    location / 
        proxy_pass_header Server;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Scheme $scheme;
        proxy_connect_timeout 10;
        proxy_read_timeout 10;
        proxy_pass http://localhost:8000/;
    
    # what to serve if upstream is not available or crashes
    error_page 500 502 503 504 /media/50x.html;

【问题讨论】:

【参考方案1】:

这个问题应该属于http://serverfault.com

尽管如此,您应该做的第一件事是为您的 phpmyadmin 配置一个单独的子域,以便于管理。

因此将有两个应用程序使用 nginx 作为反向代理运行,一个 nginx server 用于您的上述 django 应用程序,另一个 server(也称为虚拟主机)用于您的 phpmyadmin,其配置类似于:-

server 
         server_name     phpmyadmin.<domain.tld>;
         access_log      /srv/http/<domain>/logs/phpmyadmin.access.log;
         error_log       /srv/http/<domain.tld>/logs/phpmyadmin.error.log;

         location / 
                 root    /srv/http/<domain.tld>/public_html/phpmyadmin;
                 index   index.html index.htm index.php;
         

         location ~ \.php$ 
                 root            /srv/http/<domain.tld>/public_html/phpmyadmin;
                 fastcgi_pass    unix:/var/run/php-fpm/php-fpm.sock;
                 fastcgi_index   index.php;
                 fastcgi_param   SCRIPT_FILENAME  /srv/http/<domain.tld>/public_html/phpmyadmin/$fastcgi_script_name;
                 include         fastcgi_params;
         
 

您的每个server 配置都可以通过server_name 配置指向不同的域名。在这个例子中,server_name phpmyadmin.&lt;domain.tld&gt;;

这是一个取自http://wiki.nginx.org/ServerBlockExample的例子

http 
  index index.html;

  server 
    server_name www.domain1.com;
    access_log logs/domain1.access.log main;

    root /var/www/domain1.com/htdocs;
  

  server 
    server_name www.domain2.com;
    access_log  logs/domain2.access.log main;

    root /var/www/domain2.com/htdocs;
  

如您所见,server 大括号内有两个声明 httpserver 的每个声明都应包含您对 django 的配置和另一个用于 phpmyadmin 的配置。

2 个“虚拟主机”(“服务器”实例)由 nginx 处理。

【讨论】:

您好,谢谢。我是这个主题的新手,你能更具体一点吗?我需要创建两个配置文件吗?我需要做其他事情才能将它们作为反向代理运行吗?

以上是关于Nginx + Django + Phpmyadmin 配置的主要内容,如果未能解决你的问题,请参考以下文章

nginx django 升级代码不重启服务的方法

通过 Nginx (Django/React/Nginx/Docker-Compose) 提供 Django 媒体文件

一篇搞懂nginx与Django部署

通过Nginx部署Django(基于ubuntu)

Nginx 调试 Django 时出现“断管”?

Nginx与django+uwsgi成功勾搭的始末(下)