Nginx+PHP+MySQL+phpMyAdmin 环境搭建与使用(12.04.4 LTS)

Nginx

安装 Nginx

[html] view plain copy
  1. ~$ sudo apt-get install nginx  
  2. The following extra packages will be installed:  
  3.   libgd2-noxpm libjpeg-turbo8 libjpeg8 nginx-common nginx-full  
  4. Suggested packages:  
  5.   libgd-tools  
  6. The following NEW packages will be installed:  
  7.   libgd2-noxpm libjpeg-turbo8 libjpeg8 nginx nginx-common nginx-full  

查看 nginx 都安装了哪些文件及安装目录:
[html] view plain copy
  1. ~$ dpkg -l | grep nginx  
  2. ii  nginx                            1.1.19-1ubuntu0.7                           small, but very powerful and efficient web server and mail proxy  
  3. ii  nginx-common                     1.1.19-1ubuntu0.7                           small, but very powerful and efficient web server (common files)  
  4. ii  nginx-full                       1.1.19-1ubuntu0.7                           nginx web server with full set of core modules  

[html] view plain copy
  1. ~$ dpkg -L nginx  
  2. ~$ dpkg -L nginx-common  
  3. ~$ dpkg -L nginx-full  
重点留意如下文件:
[html] view plain copy
  1. /lib/systemd/system/nginx.service  
  2. /usr/share/nginx  
  3. /usr/share/nginx/www  
  4. /usr/share/nginx/www/index.html  
  5. /usr/share/nginx/www/50x.html  
  6. /etc/init.d/nginx  
  7. /etc/ufw/applications.d/nginx  
  8. /etc/default/nginx  
  9. /etc/nginx  
  10. /etc/nginx/conf.d  
  11. /etc/nginx/nginx.conf  
  12. /etc/logrotate.d/nginx  
  13. /var/lib/nginx  
  14. /var/log/nginx  
  15. /usr/sbin/nginx  

配置:/etc/nginx/nginx.conf

日志:/var/log/nginx

默认网页:/usr/share/nginx/www/index.html


Nginx 基本使用

Nginx 的使用非常简洁,通过 nginx -hman nginx 即可查看。常用命令:

nginx -t: test configuration and exit

nginx -s stop: fast shutdown

nginx -s quit: graceful shutdown(一般关闭 nginx 用此选项)

nginx -s reload: reloading the configuration file

nginx -s reopen: reopening the log files

nginx -p prefix : set prefix path(prefix 并非是 working directory,仅仅是默认配置路径(prefix/conf/nginx.conf)、默认日志路径(prefix/logs/error.log, prefix/logs/access.log)、默认d 文件目录(prefix/logs/nginx.pid)等的前缀,因此,配置中的相对路径(logs/nginx.pid, ogs/access.log, etc.)不是相对 working directory, 而是相对 prefix,它自身的默认值在 configure 时指定)(https://www.nginx.com/resources/wiki/start/topics/tutorials/installoptions/)


Note: -s 是发送信号,那么怎么知道往哪个进程发送信号呢?关键在于 pid 文件,pid 文件存有进程的 pid, 执行 -s 操作就是向这个 pid 发送信号,但是 pid 文件的配置跟 prefix 和配置文件(pid 指令)都相关,因此执行 -s 操作的命令必须跟启动命令匹配,即:

如果启动命令是:

[plain] view plain copy
  1. /opt/nginx/sbin/nginx -p /opt/nginx/ -c /opt/nginx/conf/nginx.conf  
那么,-s 命令就是:
[plain] view plain copy
  1. /opt/nginx/sbin/nginx -p /opt/nginx/ -c /opt/nginx/conf/nginx.conf -s quit  
如果不匹配,则很可能找不到 pid 文件或找到错误的 pid 文件,可能杀死其他进程,产生意想不到的后果。笔者就是在一台机器上部署了两套 nginx, 一套生产用,一套测试用,生产采用默认配置,结果不小心结束测试用的 nginx 时没有指定这些参数,意外把生产环境的 nginx 结束了。


[html] view plain copy
  1. ~$ sudo nginx   
  2. ~$ ps aux | grep nginx  
  3. root      2851  0.0  0.0  62864  1212 ?        Ss   22:45   0:00 nginx: master process nginx  
  4. www-data  2852  0.0  0.0  63220  1900 ?        S    22:45   0:00 nginx: worker process  
  5. www-data  2853  0.0  0.0  63220  1900 ?        S    22:45   0:00 nginx: worker process  
  6. www-data  2854  0.0  0.0  63220  1640 ?        S    22:45   0:00 nginx: worker process  
  7. www-data  2855  0.0  0.0  63220  1896 ?        S    22:45   0:00 nginx: worker process  
  8. hwx       2857  0.0  0.0   9392   940 pts/0    S+   22:45   0:00 grep --color=auto nginx  
  9. ~$ sudo nginx -s quit  
  10. ~$ ps aux | grep nginx  
  11. hwx       2862  0.0  0.0   9392   940 pts/0    S+   22:45   0:00 grep --color=auto nginx  

启动 nginx 之后通过浏览器访问,将显示 /usr/share/nginx/www/index.html 中的内容。


References

http://nginx.org/en/docs/beginners_guide.html

http://wiki.nginx.org/CommandLine


Nginx 配置

Nginx 配置的基本原则

1. 每一个配置项都是一个指令(directive),http://nginx.org/en/docs/dirindex.html

2. nginx 由多个模块组成,http://nginx.org/en/docs/

3. 每个指令属于一个上下文环境(context),如 http 指令属于最顶层的 context(main)(http://nginx.org/en/docs/http/ngx_http_core_module.html#http), 而 sever 属于 http 这个 context(http://nginx.org/en/docs/http/ngx_http_core_module.html#server); 每个指令属于特性的模块,如 http 指令属于 http core 模块(http://nginx.org/en/docs/http/ngx_http_core_module.html

例子——配置多个虚拟主机

Virtual Host 是 Apache httpd 的叫法,在 Nginx 中,虚拟主机叫"Server Block"( http://wiki.nginx.org/ServerBlockExample).

配置虚拟主机可以在 /etc/nginx/nginx.conf 的 http block 中直接添加 server block, 但是这样做不够优雅, /etc/nginx/nginx.conf http block 有这么一段:

[html] view plain copy
  1. http {  
  2.     ......  
  3.     ##  
  4.     # Virtual Host Configs  
  5.     ##  
  6.   
  7.     include /etc/nginx/conf.d/*.conf;  
  8.     include /etc/nginx/sites-enabled/*;  
  9. }  
可以用文件包含的方式,一个文件配置一个主机,事实上,我们在安装完 nginx 之后访问 http://localhost/ 出现的页面正是 /etc/nginx/sites-enabled/default 呈现的。下面我们增加两个虚拟主机,一个是 example.com(www.example.com), 一个是 example-php.com(www.example-php.com). 配置文件分别为 /etc/nginx/conf.d/example.com.conf 和 /etc/nginx/conf.d/example-php.com.conf.

配置变更之后注意先测试配置文件是否正确:

[html] view plain copy
  1. ~$ sudo nginx -t  
  2. nginx: the configuration file /etc/nginx/nginx.conf syntax is ok  
  3. nginx: [emerg] open() "/var/log/nginx/example.com/access.log" failed (2: No such file or directory)  
  4. nginx: configuration file /etc/nginx/nginx.conf test failed  
  5. ~$ sudo nginx -t  
  6. nginx: the configuration file /etc/nginx/nginx.conf syntax is ok  
  7. nginx: configuration file /etc/nginx/nginx.conf test is successful  
配置的日志目录必须手动创建,所以要先创建 /var/log/nginx/example.com 目录,测试通过之后 reload 一下, example.com.conf 内容如下:
[html] view plain copy
  1. server {  
  2.     listen   80;  
  3.   
  4.     root /var/www/example.com;  
  5.     index index.html index.htm index.php;  
  6.   
  7.     # Make site accessible from http://example.com/, http://www.example.com/  
  8.     server_name example.com www.example.com;  
  9.   
  10.     #location / {  
  11.     #    # First attempt to serve request as file, then  
  12.     #    # as directory, then fall back to index.html  
  13.     #    try_files $uri $uri/ /index.html;  
  14.     #    # Uncomment to enable naxsi on this location  
  15.     #    # include /etc/nginx/naxsi.rules  
  16.     #}  
  17.   
  18.     access_log /var/log/nginx/example.com/access.log;  
  19.     error_log /var/log/nginx/example.com/error.log;  
  20.   
  21.     # /var/www/example.com/404.html  
  22.     error_page 404 /404.html;  
  23.   
  24.     # redirect server error pages to the static page /50x.html  
  25.     error_page 500 502 503 504 /50x.html;  
  26.     location = /50x.html {  
  27.         root /usr/share/nginx/www;  
  28.     }  
  29.   
  30.     # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000  
  31.     location ~ \.php$ {  
  32.         fastcgi_split_path_info ^(.+\.php)(/.+)$;  
  33.         # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini  
  34.   
  35.         fastcgi_pass 127.0.0.1:9000;  
  36.         #fastcgi_pass unix:/var/run/php5-fpm.sock;  
  37.         fastcgi_index index.php;  
  38.         include fastcgi_params;  
  39.     }  
  40. }  


注意:上述配置如果将 "location /" 打开,将会导致无论输什么 url 都不会返回 404, 具体原因去搜索一下 location 的规则。

直接通过 ip 访问的问题

我们配置了 3 个 server block(/etc/nginx/conf.d/example.com.conf, /etc/nginx/conf.d/example-php.com.conf, /etc/nginx/sites-enabled/default ), 但是通过 ip 访问总是访问的是 example-php.com, 原因是因为读取配置时 example-php.com 是第一个 server block, 如果不显式设置 default server 就以第一个作为 default server. default server 最多只能指定一个,同时将 example.com 和 example-php.com 都指定为 default server:

[html] view plain copy
  1. ~$ sudo nginx -t  
  2. nginx: [emerg] a duplicate default server for 0.0.0.0:80 in /etc/nginx/conf.d/example.com.conf:2  
  3. nginx: configuration file /etc/nginx/nginx.conf test failed  

指定 default server 的方法:

  1. listen 80 default;  

只监听内网 IP

listen 指令如果只配置端口号,默认是监听 0.0.0.0:<port> 的,如果只想监听部分 ip, 可以显式指定监听 ip, 如 127.0.0.1:80

References

http://nginx.org/en/docs/http/ngx_http_core_module.html

http://wiki.nginx.org/PHPFcgiExample

http://wiki.nginx.org/FullExample

http://wiki.nginx.org/FullExample2

PHP

php 和 nginx 配合只能使用 FastCGI 模式,因此除了安装 php 以外,还需安装 PHP FPM (FastCGI Process Manager)。

原理见:http://ixdba.blog.51cto.com/2895551/806622(Nginx+FastCGI运行原理)

安装 PHP

[html] view plain copy
  1. ~$ sudo apt-get install php5  
  2. The following extra packages will be installed:  
  3.   apache2-mpm-prefork apache2-utils apache2.2-bin apache2.2-common libapache2-mod-php5 libapr1  
  4.   libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap php5-cli php5-common  
  5. Suggested packages:  
  6.   apache2-doc apache2-suexec apache2-suexec-custom php-pear php5-suhosin  
  7. The following NEW packages will be installed:  
  8.   apache2-mpm-prefork apache2-utils apache2.2-bin apache2.2-common libapache2-mod-php5 libapr1  
  9.   libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap php5 php5-cli php5-common  
  10. 0 upgraded, 12 newly installed, 0 to remove and 130 not upgraded.  


查看 PHP 都安装了哪些文件:
[html] view plain copy
  1. ~$ dpkg -l | grep php   
  2. ii  libapache2-mod-php5              5.3.10-1ubuntu3.17                          server-side, HTML-embedded scripting language (Apache 2 module)  
  3. ii  php5                             5.3.10-1ubuntu3.17                          server-side, HTML-embedded scripting language (metapackage)  
  4. ii  php5-cli                         5.3.10-1ubuntu3.17                          command-line interpreter for the php5 scripting language  
  5. ii  php5-common                      5.3.10-1ubuntu3.17                          Common files for packages built from the php5 source  
php5-cli 为 php 的命令行解释器。
[html] view plain copy
  1. ~$ dpkg -L php5  
  2. ~$ dpkg -L php5-common  
  3. ~$ dpkg -L php5-cli  
一些重要的文件:
[html] view plain copy
  1. /usr/lib/php5  
  2. /var/lib/php5  
  3. /etc/cron.d/php5  
  4. /etc/php5  
  5. /etc/php5/conf.d  
  6. /etc/php5/conf.d/pdo.ini  
  7. /etc/php5/cli  
  8. /etc/php5/cli/conf.d  

安装 PHP-FPM

[html] view plain copy
  1. ~$ sudo apt-get install php5-fpm  
  2. Suggested packages:  
  3.   php-pear  
  4. The following NEW packages will be installed:  
  5.   php5-fpm  
  6. 0 upgraded, 1 newly installed, 0 to remove and 130 not upgraded.  
  7. ...  
  8. Creating config file /etc/php5/fpm/php.ini with new version  

一些重要的文件:
[html] view plain copy
  1. ~$ dpkg -L php5-fpm  
  2. /usr/sbin/php5-fpm  
  3. /etc/init.d/php5-fpm  
  4. /etc/php5/fpm  
  5. /etc/php5/fpm/pool.d  
  6. /etc/php5/fpm/pool.d/www.conf  
  7. /etc/php5/fpm/php-fpm.conf  
  8. /etc/php5/fpm/conf.d  

配置:/etc/php5/fpm/php.ini(安装包时创建), /etc/php5/fpm/php-fpm.conf, /etc/php5/fpm/pool.d/www.conf(工作进程的配置)

可执行文件:/usr/sbin/php5-fpm

PHP-FPM 基本使用

[html] view plain copy
  1. ~$ sudo service php5-fpm  
  2. Usage: /etc/init.d/php5-fpm {start|stop|status|restart|reload|force-reload}  

[html] view plain copy
  1. ~$ sudo service php5-fpm status  
  2.  * php5-fpm is running  
  3. ~$ ps aux | grep php-fpm  
  4. root      1784  0.0  0.1  59164  3756 ?        Ss   17:42   0:00 php-fpm: master process (/etc/php5/fpm/php-fpm.conf)        
  5. www-data  1785  0.0  0.1  59164  3264 ?        S    17:42   0:00 php-fpm: pool www                                           
  6. www-data  1786  0.0  0.1  59164  3264 ?        S    17:42   0:00 php-fpm: pool www                                           
  7. www-data  1787  0.0  0.1  59164  3264 ?        S    17:42   0:00 php-fpm: pool www                                           
  8. www-data  1788  0.0  0.1  59164  3264 ?        S    17:42   0:00 php-fpm: pool www                                           
  9. hwx       2281  0.0  0.0   9392   944 pts/0    S+   18:17   0:00 grep --color=auto php-fpm  

配置 PHP 和 Nginx

用户和用户组

php-fpm 工作进程的用户和用户组要和 nginx 的工作进程的用户和用户组配成一致(没有验证不一致是是否有问题,可能跟 Web Server 交互时 TCP 方式无所谓,但是 UNIX socket 方式会涉及到权限问题,见下文 /etc/php5/fpm/pool.d/www.conf 中的提示):

[html] view plain copy
  1. ~$ ps -e -o cmd,pid,user,uid,group,gid | grep php-fpm  
  2. CMD                           PID USER       UID GROUP      GID  
  3. php-fpm: master process (/e  1784 root         0 root         0  
  4. php-fpm: pool www            1785 www-data    33 www-data    33  
  5. php-fpm: pool www            1786 www-data    33 www-data    33  
  6. php-fpm: pool www            1787 www-data    33 www-data    33  
  7. php-fpm: pool www            1788 www-data    33 www-data    33  
  8. grep --color=auto php-fpm    2314 hwx       1000 hwx       1000  
  9. ~$ ps -e -o cmd,pid,user,uid,group,gid | grep nginx  
  10. CMD                           PID USER       UID GROUP      GID  
  11. nginx: master process /usr/  1523 root         0 root         0  
  12. nginx: worker process        1524 www-data    33 www-data    33  
  13. nginx: worker process        1525 www-data    33 www-data    33  
  14. nginx: worker process        1526 www-data    33 www-data    33  
  15. nginx: worker process        1527 www-data    33 www-data    33  
  16. grep --color=auto nginx      2316 hwx       1000 hwx       1000  
默认都是 www-data 用户和 www-data 用户组,无需修改,如果需要修改,请按如下方式修改:

/etc/nginx/nginx.conf

[html] view plain copy
  1. user www-data;  
  2. worker_processes 4;  
  3. pid /var/run/nginx.pid;  

/etc/php5/fpm/pool.d/www.conf
[html] view plain copy
  1. ; Unix user/group of processes  
  2. ; Note: The user is mandatory. If the group is not set, the default user's group  
  3. ;       will be used.  
  4. user = www-data  
  5. group = www-data  
  6.   
  7. ; Set permissions for unix socket, if one is used. In Linux, read/write  
  8. ; permissions must be set in order to allow connections from a web server. Many  
  9. ; BSD-derived systems allow connections regardless of permissions.  
  10. ; Default Values: user and group are set as the running user  
  11. ;                 mode is set to 0660  
  12. ;listen.owner = www-data  
  13. ;listen.group = www-data  
  14. ;listen.mode = 0660  

监听地址

nginx 和 php-fpm 的工作方式是:nginx 作为 proxy, 将请求转发给 php-fpm. 因此,nginx 监听客户端来的请求,nginx 绑定 tcp:80 端口;php-fpm 监听 nginx 来的请求,也需要绑定一个端口,这样 nginx 才能向 php-fpm 发起请求,如果双方都在同一台机器,那么 php-fpm 既可以绑定 tcp 端口,又可以直接使用 UNIX socket, 我们看一下默认情况:

[html] view plain copy
  1. ~$ sudo netstat -ap  
  2. Active Internet connections (servers and established)  
  3. Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name  
  4. tcp        0      0 localhost:9000          *:*                     LISTEN      1784/php-fpm.conf)  
  5. tcp        0      0 *:http                  *:*                     LISTEN      1523/nginx        
  6. ...      
  7. Active UNIX domain sockets (servers and established)  
  8. Proto RefCnt Flags       Type       State         I-Node   PID/Program name    Path  
  9. unix  3      [ ]         STREAM     CONNECTED     10187    1784/php-fpm.conf)             
  10. unix  3      [ ]         STREAM     CONNECTED     11489    1523/nginx            
  11. unix  3      [ ]         STREAM     CONNECTED     11491    1523/nginx                        
  12. unix  3      [ ]         STREAM     CONNECTED     11492    1523/nginx            
  13. unix  3      [ ]         STREAM     CONNECTED     11490    1523/nginx                      
  14. unix  3      [ ]         STREAM     CONNECTED     11488    1523/nginx            
  15. unix  3      [ ]         STREAM     CONNECTED     10188    1784/php-fpm.conf)         
  16. unix  3      [ ]         STREAM     CONNECTED     11494    1523/nginx                     
  17. unix  3      [ ]         STREAM     CONNECTED     11487    1523/nginx            
  18. unix  3      [ ]         STREAM     CONNECTED     11493    1523/nginx    


以数字方式显示:
[html] view plain copy
  1. ~$ sudo netstat -anp  
  2. Active Internet connections (servers and established)  
  3. Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name  
  4. tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      1784/php-fpm.conf)  
  5. tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1523/nginx        
  6. ...      
  7. Active UNIX domain sockets (servers and established)  
  8. Proto RefCnt Flags       Type       State         I-Node   PID/Program name    Path  
  9. unix  3      [ ]         STREAM     CONNECTED     10187    1784/php-fpm.conf)              
  10. unix  3      [ ]         STREAM     CONNECTED     11489    1523/nginx            
  11. unix  3      [ ]         STREAM     CONNECTED     11491    1523/nginx                     
  12. unix  3      [ ]         STREAM     CONNECTED     11492    1523/nginx            
  13. unix  3      [ ]         STREAM     CONNECTED     11490    1523/nginx            
  14. unix  3      [ ]         STREAM     CONNECTED     11488    1523/nginx            
  15. unix  3      [ ]         STREAM     CONNECTED     10188    1784/php-fpm.conf)    
  16. unix  3      [ ]         STREAM     CONNECTED     11494    1523/nginx            
  17. unix  3      [ ]         STREAM     CONNECTED     11487    1523/nginx            
  18. unix  3      [ ]         STREAM     CONNECTED     11493    1523/nginx   
可以看出, nginx 绑定 tcp:0.0.0.0:80, php-fpm 绑定 127.0.0.1:9000.

根据上文 nginx 的配置,我们在 /var/www/example-php.com 目录创建 phpinfo.php 文件,内容如下:

  1. <?php  
  2.     phpinfo();  
  3. ?>  
访问 http://example-php.com/phpinfo.php 看是否出现 phpinfo() 打印的信息。

改用 UNIX socket 通信

修改 php5-fpm 的配置文件:
  1. ~$ sudo vi /etc/php5/fpm/pool.d/www.conf   
  2. ; The address on which to accept FastCGI requests.  
  3. ; Valid syntaxes are:  
  4. ;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific address on  
  5. ;                            a specific port;  
  6. ;   'port'                 - to listen on a TCP socket to all addresses on a  
  7. ;                            specific port;  
  8. ;   '/path/to/unix/socket' - to listen on a unix socket.  
  9. ; Note: This value is mandatory.  
  10. ;listen = 127.0.0.1:9000  
  11. listen = /var/run/php5-fpm.sock  
  12.   
  13. /etc/php5/fpm/pool.d$ sudo php5-fpm -t  
  14. [11-Apr-2015 23:12:36] NOTICE: configuration file /etc/php5/fpm/php-fpm.conf test is successful  
测试配置文件没问题之后重启 php5-fpm.


修改 nginx 配置文件:

  1. /etc/nginx$ sudo vi conf.d/example-php.com.conf  
  2. #fastcgi_pass 127.0.0.1:9000;  
  3. fastcgi_pass unix:/var/run/php5-fpm.sock;  
测试没问题之后重启 nginx.


访问 http://example-php.com/phpinfo.php 时出现错误:

  1. ==> error.log <==  
  2. 2015/04/11 23:16:57 [crit] 5274#0: *58 connect() to unix:/var/run/php5-fpm.sock failed (13: Permission denied) while connecting to upstream, client: 192.168.142.1, server: example-php.com, request: "GET /phpinfo.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "example-php.com"  
是 /var/run/php5-fpm.sock 的权限问题:
[html] view plain copy
  1. ~$ ll /var/run/php5-fpm.sock  
  2. srw-rw---- 1 root root 0 Apr 11 23:13 /var/run/php5-fpm.sock=  


/etc/php5/fpm/pool.d/www.conf 开启如下三项:

[html] view plain copy
  1. ; Set permissions for unix socket, if one is used. In Linux, read/write  
  2. ; permissions must be set in order to allow connections from a web server. Many  
  3. ; BSD-derived systems allow connections regardless of permissions.  
  4. ; Default Values: user and group are set as the running user  
  5. ;                 mode is set to 0660  
  6. listen.owner = www-data  
  7. listen.group = www-data  
  8. listen.mode = 0660  

再查看:

[html] view plain copy
  1. ~$ ll /var/run/php5-fpm.sock   
  2. srw-rw---- 1 www-data www-data 0 Apr 11 23:22 /var/run/php5-fpm.sock=  
问题解决。

MySQL+phpMyAdmin

安装

[html] view plain copy
  1. ~$ sudo apt-get install mysql-client mysql-server  
  2. The following extra packages will be installed:  
  3.   libdbd-mysql-perl libdbi-perl libhtml-template-perl libmysqlclient18 libnet-daemon-perl  
  4.   libplrpc-perl libterm-readkey-perl mysql-client-5.5 mysql-common mysql-server-5.5  
  5.   mysql-server-core-5.5  
  6. Suggested packages:  
  7.   libipc-sharedcache-perl tinyca mailx  
  8. The following NEW packages will be installed:  
  9.   libdbd-mysql-perl libdbi-perl libhtml-template-perl libmysqlclient18 libnet-daemon-perl  
  10.   libplrpc-perl libterm-readkey-perl mysql-client mysql-client-5.5 mysql-common mysql-server  
  11.   mysql-server-5.5 mysql-server-core-5.5  
  12. 0 upgraded, 13 newly installed, 0 to remove and 130 not upgraded.  

[html] view plain copy
  1. ~$ sudo apt-get install phpmyadmin  
  2. The following extra packages will be installed:  
  3.   dbconfig-common fontconfig-config libfontconfig1 libgd2-xpm libmcrypt4 libt1-5 libxpm4 php5-gd  
  4.   php5-mcrypt php5-mysql ttf-dejavu-core  
  5. Suggested packages:  
  6.   libgd-tools libmcrypt-dev mcrypt  
  7. The following packages will be REMOVED:  
  8.   libgd2-noxpm  
  9. The following NEW packages will be installed:  
  10.   dbconfig-common fontconfig-config libfontconfig1 libgd2-xpm libmcrypt4 libt1-5 libxpm4 php5-gd  
  11.   php5-mcrypt php5-mysql phpmyadmin ttf-dejavu-core  
  12. 0 upgraded, 12 newly installed, 1 to remove and 130 not upgraded.  

[html] view plain copy
  1. ┌────────────────────────────────┤ Configuring phpmyadmin ├────────────────────────────────┐     
  2. │ Please choose the web server that should be automatically configured to run phpMyAdmin.  │     
  3. │                                                                                          │     
  4. │ Web server to reconfigure automatically:                                                 │     
  5. │                                                                                          │     
  6. │    [*] apache2                                                                           │     
  7. │    [ ] lighttpd                                                                          │     
  8. │                                                                                          │                        
  9. └──────────────────────────────────────────────────────────────────────────────────────────┘  

没有 nginx 的选项,直接先选 apache2.


[html] view plain copy
  1. ┌─────────────────────────────────┤ Configuring phpmyadmin ├──────────────────────────────────┐    
  2. │                                                                                             │    
  3. │ The phpmyadmin package must have a database installed and configured before it can be       │    
  4. │ used.  This can be optionally handled with dbconfig-common.                                 │    
  5. │                                                                                             │    
  6. │ If you are an advanced database administrator and know that you want to perform this        │    
  7. │ configuration manually, or if your database has already been installed and configured, you  │    
  8. │ should refuse this option.  Details on what needs to be done should most likely be          │    
  9. │ provided in /usr/share/doc/phpmyadmin.                                                      │    
  10. │                                                                                             │    
  11. │ Otherwise, you should probably choose this option.                                          │    
  12. │                                                                                             │    
  13. │ Configure database for phpmyadmin with dbconfig-common?                                     │    
  14. │                                                                                             │    
  15. │                          <Yes>                             <No>                             │    
  16. │                                                                                             │    
  17. └─────────────────────────────────────────────────────────────────────────────────────────────┘   
由于之前没有配置过 MySQL, 所以这部也 "Yes".
[html] view plain copy
  1. dbconfig-common: writing config to /etc/dbconfig-common/phpmyadmin.conf  
  2.   
  3. Creating config file /etc/dbconfig-common/phpmyadmin.conf with new version  
  4.   
  5. Creating config file /etc/phpmyadmin/config-db.php with new version  
  6. granting access to database phpmyadmin for phpmyadmin@localhost: success.  
  7. verifying access for phpmyadmin@localhost: success.  
  8. creating database phpmyadmin: success.  
  9. verifying database phpmyadmin exists: success.  
  10. populating database via sql...  done.  
  11. dbconfig-common: flushing administrative password  
  12. Processing triggers for libc-bin ...  
  13. ldconfig deferred processing now taking place  
过程中会修改 /etc/dbconfig-common/phpmyadmin.conf 和 /etc/phpmyadmin/config-db.php, 并创建一个 phpmyadmin@localhost 的 MySQL 账户并将信息写入 /etc/phpmyadmin/config-db.php.


我们看一下 phpMyAdmin 都安装了哪些文件:

[html] view plain copy
  1. ~$ dpkg -L phpmyadmin  
  2. /etc/phpmyadmin  
  3. /etc/phpmyadmin/apache.conf  
  4. /etc/phpmyadmin/config.footer.inc.php  
  5. /etc/phpmyadmin/config.header.inc.php  
  6. /etc/phpmyadmin/config.inc.php  
  7. /etc/phpmyadmin/lighttpd.conf  
  8. /etc/phpmyadmin/phpmyadmin.desktop  
  9. /etc/phpmyadmin/phpmyadmin.service  
  10. /usr/share/phpmyadmin  
  11. /usr/share/dbconfig-common/data/phpmyadmin  
配置:/etc/phpmyadmin

项目目录:/usr/share/phpmyadmin


访问 phpMyAdmin

为 phpMyAdmin 创建 nginx 的虚拟主机:

[html] view plain copy
  1. server {  
  2.     listen   80;  
  3.   
  4.     root /usr/share/phpmyadmin;  
  5.     index index.html index.htm index.php;  
  6.   
  7.     # Make site accessible from http://phpmyadmin.xxx/, http://www.phpmyadmin.xxx/  
  8.     server_name phpmyadmin.xxx www.phpmyadmin.xxx;  
  9.   
  10.     access_log /var/log/nginx/phpmyadmin/access.log;  
  11.     error_log /var/log/nginx/phpmyadmin/error.log;  
  12.   
  13.     # /var/www/example-php.com/404.html  
  14.     error_page 404 /404.html;  
  15.     location = /404.html {  
  16.         root /var/www/example-php.com;  
  17.     }  
  18.   
  19.     # redirect server error pages to the static page /50x.html  
  20.     error_page 500 502 503 504 /50x.html;  
  21.     location = /50x.html {  
  22.         root /usr/share/nginx/www;  
  23.     }  
  24.   
  25.     # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000  
  26.     location ~ \.php$ {  
  27.         fastcgi_split_path_info ^(.+\.php)(/.+)$;  
  28.         # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini  
  29.   
  30.         #fastcgi_pass 127.0.0.1:9000;  
  31.         fastcgi_pass unix:/var/run/php5-fpm.sock;  
  32.         fastcgi_index index.php;  
  33.         include fastcgi_params;  
  34.     }  
  35. }  

[html] view plain copy
  1. /etc/nginx/conf.d$ ls  
  2. example.com.conf  example-php.com.conf  phpmyadmin.conf  
  3. /etc/nginx/conf.d$ sudo nginx -t  
  4. nginx: the configuration file /etc/nginx/nginx.conf syntax is ok  
  5. nginx: [emerg] open() "/var/log/nginx/phpmyadmin/access.log" failed (2: No such file or directory)  
  6. nginx: configuration file /etc/nginx/nginx.conf test failed  
  7. /etc/nginx/conf.d$ sudo mkdir /var/log/nginx/phpmyadmin  
  8. /etc/nginx/conf.d$ sudo nginx -t  
  9. nginx: the configuration file /etc/nginx/nginx.conf syntax is ok  
  10. nginx: configuration file /etc/nginx/nginx.conf test is successful  

访问 http://phpmyadmin.xxx/ 时发现会出现如下错误:
[html] view plain copy
  1. 缺少 mysqli 扩展。请检查 PHP 配置。  

配置 php 的 mysql 和 mysqli 扩展

访问 http://example-php.com/phpinfo.php 根本找不到 mysql 和 mysqli 的项,所以是 php-fpm 配置 mysql 和 mysqli 扩展的部分除了问题。
那么,mysql 和 mysqli 是啥东东呢?其实他是 php 的 mysql 扩展,看名字的确以为是 mysql 自带了,我们从安装包中可以找到踪迹:

[html] view plain copy
  1. $ dpkg -l | grep mysql  
  2. ii  libdbd-mysql-perl                4.020-1build2                               Perl5 database interface to the MySQL database  
  3. ii  libmysqlclient18                 5.5.41-0ubuntu0.12.04.1                     MySQL database client library  
  4. ii  mysql-client                     5.5.41-0ubuntu0.12.04.1                     MySQL database client (metapackage depending on the latest version)  
  5. ii  mysql-client-5.5                 5.5.41-0ubuntu0.12.04.1                     MySQL database client binaries  
  6. ii  mysql-client-core-5.5            5.5.37-0ubuntu0.12.04.1                     MySQL database core client binaries  
  7. ii  mysql-common                     5.5.41-0ubuntu0.12.04.1                     MySQL database common files, e.g. /etc/mysql/my.cnf  
  8. ii  mysql-server                     5.5.41-0ubuntu0.12.04.1                     MySQL database server (metapackage depending on the latest version)  
  9. ii  mysql-server-5.5                 5.5.41-0ubuntu0.12.04.1                     MySQL database server binaries and system database setup  
  10. ii  mysql-server-core-5.5            5.5.41-0ubuntu0.12.04.1                     MySQL database server binaries  
  11. ii  php5-mysql                       5.3.10-1ubuntu3.17                          MySQL module for php5  
  12.   
  13. $ dpkg -L mysql-server-core-5.5  
  14. /usr/bin/my_print_defaults  
  15. /usr/bin/mysql_install_db  
  16. /usr/bin/mysql_upgrade  
  17. /usr/sbin/mysqld  
  18.   
  19. $ dpkg -L mysql-server-5.5  
  20. /usr/bin/myisamlog  
  21. /usr/bin/mysqlbinlog  
  22. /usr/bin/mysqld_multi  
  23. /usr/bin/myisampack  
  24. /usr/bin/mysql_convert_table_format  
  25. /usr/bin/mysql_zap  
  26. /usr/bin/mysql_setpermission  
  27. /usr/bin/mysql_secure_installation  
  28. /usr/bin/resolveip  
  29. /usr/bin/perror  
  30. /usr/bin/mysqlhotcopy  
  31. /usr/bin/mysqltest  
  32. /usr/bin/msql2mysql  
  33. /usr/bin/mysqld_safe  
  34. /usr/bin/myisamchk  
  35. /usr/bin/replace  
  36. /usr/bin/mysql_tzinfo_to_sql  
  37. /usr/bin/resolve_stack_dump  
  38. /usr/lib/mysql  
  39. /usr/lib/mysql/plugin  
  40. /usr/lib/mysql/plugin/auth_test_plugin.so  
  41. /usr/lib/mysql/plugin/ha_example.so  
  42. /usr/lib/mysql/plugin/qa_auth_server.so  
  43. /usr/lib/mysql/plugin/adt_null.so  
  44. /usr/lib/mysql/plugin/auth_socket.so  
  45. /usr/lib/mysql/plugin/qa_auth_interface.so  
  46. /usr/lib/mysql/plugin/auth.so  
  47. /usr/lib/mysql/plugin/mypluglib.so  
  48. /usr/lib/mysql/plugin/semisync_master.so  
  49. /usr/lib/mysql/plugin/semisync_slave.so  
  50. /usr/lib/mysql/plugin/qa_auth_client.so  
  51. /usr/lib/mysql/plugin/libdaemon_example.so  
  52. /etc/mysql  
  53. /etc/mysql/conf.d  
  54. /etc/mysql/conf.d/mysqld_safe_syslog.cnf  
  55. /etc/mysql/debian-start  
  56. /etc/init/mysql.conf  
  57. /etc/init.d/mysql  
  58.   
  59. $ dpkg -L mysql-common  
  60. /etc/mysql  
  61. /etc/mysql/my.cnf  
  62. /etc/mysql/conf.d  
  63.   
  64. $ dpkg -L mysql-client-core-5.5   
  65. /usr/bin/mysql  
  66. /usr/bin/mysqlcheck  
  67.   
  68. $ dpkg -L mysql-client-5.5  
  69. /usr/bin/mysql_plugin  
  70. /usr/bin/mysqlimport  
  71. /usr/bin/mysqldumpslow  
  72. /usr/bin/innochecksum  
  73. /usr/bin/mysqlshow  
  74. /usr/bin/mysqladmin  
  75. /usr/bin/mysqlbug  
  76. /usr/bin/mysqldump  
  77. /usr/bin/mysql_find_rows  
  78. /usr/bin/mysqlaccess  
  79. /usr/bin/mysql_client_test  
  80. /usr/bin/myisam_ftdump  
  81. /usr/bin/mysqlreport  
  82. /usr/bin/mysql_waitpid  
  83. /usr/bin/mysqlslap  
  84. /usr/bin/innotop  
  85. /usr/bin/mysql_fix_extensions  
  86. /usr/bin/mysqlanalyze  
  87. /usr/bin/mysqloptimize  
  88. /usr/bin/mysqlrepair  
  89.   
  90. $ dpkg -L libmysqlclient18  
  91. /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18.0.0  
  92. /usr/lib/x86_64-linux-gnu/libmysqlclient.so.18  
  93. /usr/lib/x86_64-linux-gnu/libmysqlclient_r.so.18  
  94. /usr/lib/x86_64-linux-gnu/libmysqlclient_r.so.18.0.0  
  95.   
  96. $ dpkg -L php5-mysql  
  97. /usr/lib/php5  
  98. /usr/lib/php5/20090626  
  99. /usr/lib/php5/20090626/pdo_mysql.so  
  100. /usr/lib/php5/20090626/mysql.so  
  101. /usr/lib/php5/20090626/mysqli.so  
  102. /etc/php5  
  103. /etc/php5/conf.d  
  104. /etc/php5/conf.d/pdo_mysql.ini  
  105. /etc/php5/conf.d/mysqli.ini  
  106. /etc/php5/conf.d/mysql.ini  
从最后一个包 php5-mysql 可以看出,mysql.so, mysqli.so 都是 php-mysql 包安装的。那么接下来我们该如何修改配置呢?

配置非常多:

[html] view plain copy
  1. ~$ ls /etc/php5/  
  2. apache2  cli  conf.d  fpm  

由于我们这里是通过 php-fpm 在运行 php, 所以应该修改 php-fpm 的配置,查看一下现有配置:

[html] view plain copy
  1. /etc/php5/fpm/conf.d$ cat mysql.ini mysqli.ini pdo_mysql.ini  
  2. ; configuration for php MySQL module  
  3. extension=mysql.so  
  4. ; configuration for php MySQL module  
  5. extension=mysqli.so  
  6. ; configuration for php MySQL module  
  7. extension=pdo_mysql.so  
根据上面 php5-mysql 包中 so 的路径情况看,这里的路径是不正确的,因此将每个 so 的路径改为 "/usr/lib/php5/20090626/xxx.so", 测试没问题:
[html] view plain copy
  1. $ sudo php5-fpm -t  
  2. [12-Apr-2015 17:48:44] NOTICE: configuration file /etc/php5/fpm/php-fpm.conf test is successful  
成功访问 http://phpmyadmin.xxx/, 访问 http://example-php.com/phpinfo.php 时也出现了 mysql, mysqli,pdo_mysql 的项。


版权声明:本文为博主原创文章,未经博主允许不得转载。 http://blog.csdn.net/duyiwuer2009/article/details/44966841
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值