IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

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

    David Yin发表于 2015-09-22 06:27:32
    love 0

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

    • 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

    把网站放在Dreamhost,通过LinkWorth获取广告收益,每个链接高达$40。
    好用的VPN
    Site Meter

    延伸阅读

    • 重建服务器
    • MovableType的尝试
    • 2015年底网站的最佳配置
    • 推荐一本书: Ubuntu Server 最佳方案(第2版)
    • php的mysql扩展和mysqli扩展
    • 推荐使用Burst.Net的VPS
    • VPS服务的稳定性及客户服务
    • 挑选VPS的几个考虑
    • 价廉物美的VPS
    • 锚文本


沪ICP备19023445号-2号
友情链接