安装Nginx, MySQL, PHP-FPM, Perl-Fastcgi到Ubuntu 14.04 LTS

  • Posted on | Updated on
  • by
  • in

上一篇文章我有提到过重建了服务器,其实还是花了我不少时间的,还走了一些弯路,参考了几篇说明,综合在一起,才做到同时支持这些特性。

  • Nginx 1.8.0
  • MySQL 5.5
  • PHP-FPM 5.5.9
  • Perl Fastcgi
  • 还有SSL,SPDY等等。

这是一个备忘记录,对此不做任何的保证。

从头开始说起:

安装系统

整个系统是在 VPS 上,于是在 VPS 的控制面板那里,选择 OS 模板,安装了 Ubuntu 14.04 64bit。通常系统安装完成后,SSH 服务器也已经安装在里面了,可以 ssh 连接到服务器的,之后的操作是全部是在 ssh 终端窗口操作的。如果你是在Virtualbox虚拟机中安装的系统,在选择可选服务器的时候,只选择SSH Server就可以了。

安装后,会得到 IP 地址,比如 22.231.113.64,获得IP地址后,就到DNS 记录的地方更新所要安装的网站的 A记录,比如这里的 seo.g2soft.net,下面就用此为例。

第一次 ssh 登入后,就要执行下面的命令,以更新系统到最新状态。

sudo apt-get update
sudo apt-get upgrade

当时有165个更新,以及3个不能更新的。

sudo apt-get dist-upgrade

更新了三个并且新安装了四个软件包

sudo shutdown -r now

重启系统

重新 SSH 连接服务器

安装 Nginx 1.8.0

Nginx目前的稳定版是1.8.0,参考的官方安装文档

编辑 /etc/apt/sources.list ,添加下面内容到文档最后。

deb http://nginx.org/packages/ubuntu/ trusty nginx
deb-src http://nginx.org/packages/ubuntu trusty nginx

添加 Nginx Key

wget http://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key 

安装

sudo apt-get update
sudo apt-get install nginx 

至此,Nginx已经安装完毕,并且启动了,可以从浏览器直接输入IP地址来访问了。

安装 Webmin

Webmin是我用的最多的控制面板,最新版是1.760,安装过程参考官方文档

wget http://prdownloads.sourceforge.net/webadmin/webmin_1.760_all.deb
sudo apt-get install perl libnet-ssleay-perl openssl libauthen-pam-perl libpam-runtime libio-pty-perl apt-show-versions python
sudo dpkg --install webmin_1.760_all.deb

完成之后,就会有提示,可以登录webmin面板了。

输入 https://22.231.113.64:10000 ,就可以看到登入框了。

登入后,选择 System > Bootup and Shutdown ,查看并确认 Nginx 服务会开机启动。

设置 Nginx 主机

这里要先对Nginx进行设置,然后添加 seo.g2soft.net 主机,并且加上 SSL 证书支持。

编辑 /etc/nginx/nginx.conf ,修改如下,因为服务器有两个核,还有就是增加了gzip的支持,并列出了所支持gzip的文档类型。下面是我的nginx.conf的完整内容。

user  nginx;
worker_processes  2;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    tcp_nopush     on;
    tcp_nodelay   on;
    keepalive_timeout  60;
    gzip  on;
    gzip_http_version  1.1;
    gzip_comp_level    5;
    gzip_min_length 256;
    gzip_proxied       any;
    gzip_types
        application/atom+xml
        application/javascript
        application/json
        application/rss+xml
        application/vnd.ms-fontobject
        application/x-font-ttf
        application/x-web-app-manifest+json
        application/xhtml+xml
        application/xml
        font/opentype
        image/svg+xml
        image/x-icon
        text/css
        text/plain
        text/xml
        text/x-component;
    gzip_vary   on;

    include /etc/nginx/conf.d/*.conf;
}

可以看到最后是包含配置文件。

在添加虚拟主机前,先要准备好 SSL 所需要的文件,参考另一篇文章

  • Root CA Certificate - AddTrustExternalCARoot.crt
  • Intermediate CA Certificate - COMODORSAAddTrustCA.crt
  • Intermediate CA Certificate - COMODORSADomainValidationSecureServerCA.crt
  • My PositiveSSL Certificate - seo.g2soft.net.crt

制作证书文件:

cat  seo.g2soft.net.crt COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt > crt.pem
mv crt.pem /etc/nginx/ssl/
mv key.pem /etc/nginx/ssl/
openssl dhparam -out /etc/nginx/ssl/dhparam.2048.pem 2048

上面四个命令,是分别制作Nginx所需的证书文件;移动证书到指定目录;移动私钥到指定目录;生成2048位的 DH参数。

接下来还要为 SSL Stapling 准备 trusted 证书,此证书包括中间证书和根证书。

cat COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt > trust.pem
mv trust.pem /etc/nginx/ssl/

现在证书的准备工作做好了,可以下一步了。

创建并编辑 /etc/nginx/conf.d/seo.conf

# HTTP site redirect to HTTPS
server {
       listen         80;
       server_name    seo.g2soft.net;
       return         301 https://seo.g2soft.net$request_uri;
}

# HTTPS server
#
server {
    listen       443 ssl spdy;
    spdy_headers_comp 1;
    server_name seo.g2soft.net;
    ssl_certificate      /etc/nginx/ssl/crt.pem;
    ssl_certificate_key  /etc/nginx/ssl/key.pem;

    ssl_session_cache shared:SSL:50m;
    ssl_session_timeout  1d;

    ssl_buffer_size 1500;

    ssl_dhparam /etc/nginx/ssl/dhparam.2048.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
    ssl_prefer_server_ciphers on;

add_header Strict-Transport-Security max-age=15768000;

ssl_stapling on;
ssl_stapling_verify on;

ssl_trusted_certificate /etc/nginx/ssl/trust.pem;
resolver 8.8.8.8 8.8.4.4 valid=300s;

client_max_body_size 100M;

root /home/davidyin/seo.g2soft.net;
index index.php index.html  index.htm;
    location / {
        try_files $uri $uri/ = 404;
    }


    error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # Static resources
        location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
            expires 30d;
            add_header Pragma public;
            add_header Cache-Control "public";
        }
}

加密协议部分也是按照之前的 SSL配置生成器

上面配置文件的最后一段是对于静态文件的缓存设置。

service nginx reload

至此可以到浏览器中输入 https://seo.g2soft.net/

安装 MySQL 服务器

输入下面的命令安装

sudo apt-get install mysql-server

安装过程中要设置数据库root用户的密码,记得要设置好。
在Webmin中,确认MySQL是自动开机启动的。

安装 PHP-FPM

输入下面的命令安装 php5-fpm以及php5-mysql支持。

sudo apt-get install php5-fpm php5-mysql

编辑 /etc/php5/fpm/php.ini ,修改其中一个参数如下。

cgi.fix_pathinfo = 0

然后启动服务

sudo service php5-fpm restart

配置 Nginx 支持 PHP

编辑 /etc/nginx/conf.d/seo.conf , 增加下面一段到 Server 部分中。

# PHP scripts
    location ~ \.html|php$ {
        try_files $uri =404;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;

    }

上面的配置文件中,会支持 html 和 php 后缀的文件都通过 php 解析。

查看一下 /etc/php5/fpm/poold/www.conf 文件,确认 user 和 group 都是 nginx,否则可能会有权限问题。

安装 Perl 支持

使用的是 fastcgi 方式。参考的文档是这篇

先在 SSH 窗口输入下面的命令安装必要的模块

sudo apt-get install libfcgi-perl
sudo wget http://nginxlibrary.com/downloads/perl-fcgi/fastcgi-wrapper -O /usr/bin/fastcgi-wrapper.pl
sudo chmod +x /usr/bin/fastcgi-wrapper.pl

上面的 fastcgi-wrapper 文件,也可以从这里下载 fastcgi-wrapper

然后创建文件 /etc/init.d/perl-fcgi 文件内容如下:

#!/bin/bash
PERL_SCRIPT=/usr/bin/fastcgi-wrapper.pl
RETVAL=0
case "$1" in
    start)
      $PERL_SCRIPT
      RETVAL=$?
  ;;
    stop)
      killall -9 perl
      RETVAL=$?
  ;;
    restart)
      killall -9 perl
      $PERL_SCRIPT
      RETVAL=$?
  ;;
    *)
      echo "Usage: perl-fastcgi {start|stop|restart}"
      exit 1
  ;;
esac
exit $RETVAL

接下来,执行下面的命令

sudo chmod a+x /etc/init.d/perl-fcgi
sudo update-rc.d perl-fcgi defaults
sudo service perl-fcgi start

剩下的就是在 Nginx 的配置文件中的 Server 部分,加入下面的内容:

  location ~ \.pl|cgi$ {
      try_files $uri =404;
      gzip off;
      fastcgi_pass  127.0.0.1:8999;
      fastcgi_index index.pl;
      fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
      include fastcgi_params;
      }

然后重启 Nginx 服务器。

sudo service nginx reload

就可以了。


整个的步骤大概就是这样。

几个重要软件版本是这样的。

ubuntu-nginx-mysql-version.jpg


作者: David Yin
原载: SEO 网站优化推广
版权所有。转载时必须以链接形式注明作者和及本声明。