• LNMP环境搭建(discuz论坛)


    一、操作系统级环境及软件版本

    操作系统:CentOS release 6.5 (Final)minimal

    内核版本:2.6.32-431.el6.x86_64

    MySQL版本:MySQL-5.6.28

    nginx版本:nginx-1.8.1

    php版本:php-5.6.19

    二、安装MySQL-5.6.28

    获取地址:http://mirrors.sohu.com/mysql/自行选择想要的版本

    mysql-5.6.28-linux-glibc2.5-x86_64.tar.gz这个版本是官方编译好的版本,解压后直接初始化即可使用,如果使用源码编译安装需要注意的是MySQL5.5版本以后要用cmake进行编译,编译时需要事先安装cmake。

    解压mysql-5.6.28-linux-glibc2.5-x86_64.tar.gz

    # tar -zxvf mysql-5.6.28-linux-glibc2.5-x86_64.tar.gz

    将解压后的文件移动到/usr/local/下并命名为mysql

    # mv mysql-5.6.28-linux-glibc2.5-x86_64 /usr/local/mysql

    创建mysql用户没有家目录,并且不能登录

    # useradd -M mysql -s /sbin/nologin

    创建数据库文件存储位置

    # mkdir -p /database/mysql

    将所有者和所属组改为mysql

    # chown -R mysql.mysql /database/mysql/

    初始化数据库

    # ./scripts/mysql_install_db --user=mysql --datadir=/database/mysql

    将mysql的二进制bin目录添加到用户的环境变量中

    # vim ~/.bash_profile

    将/usr/local/mysql/bin添加到PATH中

    # source ~/.bash_profile

    配置mysql的环境并且开机自启动

    # cp mysql.server /etc/init.d/mysqld

    一定要执行这个,否则后悔莫及,不解释

    # sed -i 's#^datadir=#datadir=/database/mysql#' /etc/init.d/mysqld

    # chkconfig --add mysqld

    # chkconfig mysqld on

    编辑mysql的配置文件

    # vim /usr/local/mysql/my.cnf

    添加如下内容不配置主从的情况下的配置:

    basedir=/usr/local/mysql

    datadir=/database/mysql/data

    port=3306

    socket=/tmp/mysql.sock

    lower_case_table_names=1

    key_buffer_size=256M

    sort_buffer_size=1M

    read_buffer_size=1M

    read_rnd_buffer_size=4M

    myisam_sort_buffer_size=64M

    thread_cache_size=16

    query_cache_size=16M

    thread_concurrency=4

    interactive_timeout=8

    wait_timeout=8

    slow_query_log=on

    long_query_time=1

    slow-query-log-file=/database/mysql/slow.log

    具体参数参考MySQL常用配置

    三、安装php

    安装php之前先安装差不多用到的包

    # yum -y install openssl-devel bzip2-devel libxml2-devel curl-devel libpng-devel libjpeg-devel freetype-devel libtool-ltdl-devel perl-devel

    安装epel-release扩展源

    rpm -ivh " http://www.lishiming.net/data/attachment/forum/epel-release-6-8_64.noarch.rpm "

    # yum -y install libmcrypt-devel

    创建php-fpm用户

    # useradd -M php-fpm -s /sbin/nologin

    # tar zxvf php-5.6.19.tar.gz

    # cd php-5.6.19

    # ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm --with-fpm-user=php-fpm --with-fpm-group=php-fpm --with-mysql=/usr/local/mysql/ --with-mysql-sock=/tmp/mysql.sock --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-ftp --enable-mbstring --enable-exif --disable-ipv6

    # make -j 2

    # make install

    # cp php.ini-production /usr/local/php/etc/php.ini

    将php-fpm添加到系统服务并设置为开机自启动

    # cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

    # chmod 755 /etc/init.d/php-fpm

    # chkconfig --add php-fpm

    # chkconfig php-fpm on

    # cd /usr/local/php/etc/

    # mv php-fpm.conf.default php-fpm.conf

    检查php-fpm的位置文件是否正确

    # /usr/local/php/sbin/php-fpm -t

    启动php-fpm

    # service php-fpm start

    四、安装nginx

    # tar -zxvf nginx-1.8.1.tar.gz

    # cd nginx-1.8.1

    # ./configure --prefix=/usr/local/nginx --with-pcre

    # make -j 2

    # make install

    启动nginx

    # /usr/local/nginx/sbin/nginx

    去配置文件里将php的配置项打开

    # vim /usr/local/nginx/conf/nginx.conf

    location ~ .php$ {

                root           html;

                fastcgi_pass   127.0.0.1:9000;

                fastcgi_index  index.php;

                fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;

                include        fastcgi_params;

            }

    重新加载nginx配置文件

    # /usr/local/nginx/sbin/nginx -s reload

    在/usr/local/nginx/html目录先可以创建php的信息页进行测试五五、php-fpm常用跟配置

    [global]

    pid = /usr/local/php/var/run/php-fpm.pid

    error_log = /usr/local/php/var/log/php-fpm.log

    [www]

    listen = /tmp/www.sock

    user = php-fpm

    group = php-fpm

    pm = dynamic

    pm.max_children = 50

    pm.start_servers = 20

    pm.min_spare_servers = 5

    pm.max_spare_servers = 35

    pm.max_requests = 500

    rlimit_files = 1024

    slowlog = /tmp/phpslow.log

    request_slowlog_timeout = 1

    六、常见的502错误

    主要是因为nginx对php-fpm的sock没有读写权限造成的,还有一点就是在搭建discuz论坛的时候discuz目录下的权限应该对php-fpm用户有度读写的权限才可以,并不是nginx。

    # chown -R php-fpm:php-fpm /web/discuz/

    七、nginx用户认证

    在discuz的配置文件中加入下面的内容

    location ~ .*admin.php$ {

            auth_basic "fanjinbao auth";

            auth_basic_user_file /usr/local/nginx/conf/.htpasswd;

            include fastcgi_params;

            fastcgi_pass unix:/tmp/discuz.sock;

            fastcgi_index index.php;

            fastcgi_param SCRIPT_FILENAME /web/discuz$fastcgi_script_name;

    }

    .htpasswd文件需要借助于apahce的密码生成工具才可以哦

    八、nginx域名跳转

    在discuz.conf的server中添加如下内容:

    if ($host != 'www.discuz.com')

    {

        rewrite ^/(.*)$ http://www.discuz.com/$1 permanent;

    }

    九、nginx不记录指定文件类型日志

    在discuz.conf的server中添加如下内容:

    location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$

    {

        access_log off;

    }

    location ~ (static|cache)

    {

        access_log off;

    }

    十、nginx的日志切割脚本

    #!/bin/bash

    d=`date -d "-1 day" +%F`

    [ -d /tmp/nginx_log ] || mkdir /tmp/nginx_log

    mv /web/discuz.log /tmp/nginx_log/$d.log

    /etc/init.d/nginxd reload > /dev/null

    cd /tmp/nginx_log/

    gzip -f $d.log

    十一、nginx配置静态文件过期时间

    location ~ .(js|css)

    {

        access_log off;

        expires 2h;

    }

    十二、nginx配置防盗链

    location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$

        {

            access_log off;

            expires 15d;

            valid_referers none blocked *.discuz.com *.fansik.com;

            if ($invalid_referer)

            {

                    return 403;

            }

        }

    测试防盗链是否配置成功可以使用curl命令进行测试:

    # curl -e "http://www.baidu.com/111" -x127.0.0.1:80 'http://www.discuz.com/static/image/common/logo.png' -I

    这个返回的状态码肯定是403

    # curl -e "http://www.fansik.com/111" -x127.0.0.1:80 'http://www.discuz.com/static/image/common/logo.png' -I

    这个返回的状态码肯定是200

    十二、nginx的访问控制

    直接在配置文件(或者location中)添加

    allow 127.0.0.1;

    deny 1.1.1.1;

    十三、nginx禁止指定user_agent

    if ($http_user_agent ~* 'curl|baidu|11111')

        {

            return 403;

        }

    ~*:不区分大小写

    十四、nginx代理和负载

    upstream baidu{

            server 61.135.169.125:80;

            server 61.135.169.121:80;

    }

    server {

            listen 80;

            server_name www.baidu.com;

            location / {

                    proxy_pass http://baidu/;

                    proxy_set_header Host $host;

            }

    }

  • 相关阅读:
    区间dp体会
    P1083借教室 noip提高组复赛2012
    P2678跳石头体会 noip2015提高组
    tarjan求LCA的体会
    P1006 传纸条
    P1140 相似基因 详解
    UVA1025 城市里的间谍 A Spy in the Metro 题解
    DAG上的动规嵌套矩形问题(含思考题)
    洛谷P1030c++递归求解先序排列
    Test 2019.7.22
  • 原文地址:https://www.cnblogs.com/fansik/p/5295451.html
Copyright © 2020-2023  润新知