LNMP搭建

  1. 安装NGINX
    1. 编译前准备
      1. Nginx的配置及运行需要pcre、zlib等软件包的支持,因此应预先安装这些软件的开发包(devel),以便提供相应的库和头文件,确保nginx安装顺利完成

      # yum -y install zlib-devel pcre-devel

      1. 创建运行用户、组:

      Nginx服务程序默认以nobody身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限,增加灵活性、降低安全风险。如:创建一个名为nginx的用户,不建立宿主目录,也禁止登录到shell环境。

      # useradd -M -s /sbin/nologin nginx

    2. 编译安装nginx
      1. # tar -zxvf nginx-1.0.8.tar.gz
      2. #cd nginx-1.0.8/
      3. # ./configure --prefix=/usr/local/nginx --user=nginx--group=nginx --with-http_stub_status_module

        注:配置前可以参考:./configure --help给出说明

        --us--prefix:设定Nginx的安装目录

        er和—group:指定Nginx运行用户和组

        --with-http_stub_status_module:启用http_stub_status_module模块以支持状态统计

      4. # make && make install
      5. #vim nginx #编写nginx的启动脚本

        #!/bin/bash

        #chkconfig: 2345 67 23

        #description:this script for nginx stop or start or restart or reload

        CMDPATH="/usr/local/nginx/sbin/nginx"

        PIDDIR="/usr/local/nginx/logs/nginx.pid"

        [ -f /etc/init.d/functions ] && . /etc/init.d/functions

        Usage(){

        echo "Usage: $0 start|stop|reload|restart"

        exit

        }

        Start(){

        if [ ! -e ${PIDDIR} ];then

        ${CMDPATH}

        action "Nginx starting..." /bin/true

        else

        echo "Nginx is running..."

        exit

        fi

        }

        Stop(){

        if [ -e ${PIDDIR} ];then

        kill -s QUIT $(cat ${PIDDIR})

        action "Nginx is stopping..." /bin/true

        else

        echo "Nginx stopped..."

        exit

        fi

        }

        Restart(){

        Stop &>/dev/null

        Start &>/dev/null

        action "Nginx restarted..." /bin/true

        }

        Reload(){

        kill -s HUP $(cat ${PIDDIR})

        action "Nginx reload" /bin/true

        }

        if [ $# -ne 1 ];then

        Usage

        exit

        fi

        case "$1" in

        start)

        Start

        ;;

        stop)

        Stop

        ;;

        restart)

        Restart

        ;;

        reload)

        Reload

        ;;

        *)

        Usage

        exit

        esac

      6. # chmod +x nginx

        # cp nginx /etc/init.d/nginx

        # cd /etc/init.d/

        # chkconfig --add nginx

      7. # service nginx start #启动nginx
      8. # ss -tunlp | grep 80
    3. 编译MySQL
      1. # tar xf mysql-5.1.55.tar.gz
      2. # cd mysql-5.1.55
      3. # yum -y install ncurses-devel
      4. # ./configure --prefix=/usr/local/mysql --with-charset=utf8 --with-collation=utf8_general_ci --with-extra-charsets=gbk,gb2312

        注:--with-charset:指定默认使用的字符集编码;--with-collation:指定默认使用的字符集校对规则,utf8_general_ci是适用于UTF-8字符集的通用规则;--with-extra-charsets:指定额外支持的其他字符集编码。

      5. 优化调整

        # cp support-files/my-medium.cnf /etc/my.cnf

        # cp support-files/mysql.server /etc/init.d/mysqld

        # chmod +x /etc/init.d/mysqld

        # chkconfig --add mysqld

        # ln -s /usr/local/mysql/bin/* /usr/local/bin/

        # ln -s /usr/local/mysql/lib/mysql/* /usr/lib/

        # ln -s /usr/local/mysql/include/mysql/* /usr/include/

      6. 初始化数据库

        # useradd -M -s /sbin/nologin mysql

        # cd /usr/local/mysql/bin/

        # ./mysql_install_db --user=mysql

        # chown -R root:mysql /usr/local/mysql/

        # chown -R mysql:mysql /usr/local/mysql/var/

        # service mysqld start

        # mysqladmin -uroot –p password '123456' #给root加密码

    4. 安装php

      1、简介:较新版本(如5.3)的PHP已经自带FPM(fastCGI process manager,FastCGI进程管理器)模块,用来对PHP解析实例进行管理,优化解析效率,因此在配置PHP编译选项时应添加"--enable-fpm"以启用此模块。

为了提高PHP解析效率,建议将相应版本的ZendGuardLander也装上

  1. # yum -y install libxml2-devel libpng-devel libjpeg-devel
  2. # tar xf php-5.3.6.tar.gz
  3. # cd php-5.3.6
  4. # ./configure --prefix=/usr/local/php5 --with-gd --with-zlib --with-mysql=/usr/local/mysql/ --with-config-file-path=/usr/local/php5 --enable-mbstring --enable-fpm

    注:在RHEL664系统中按上面的配置项配置可能会报以下错误,如果要是报错的话请按如下方法解决:

解决方法:

根据报错发现是因为libpng.so和libpng.a找不到,但libpng的相关软件包我已经安装了,如下图查询结果,发现libpng的包都安装了。

# rpm -qa | grep libpng

执行下列命令,可以查找libpng.so在哪里

# yum –y install mlocate

# updatedb

# locate libpng

# cp -rfp /usr/lib64/libpng.* /usr/lib/

# cp -frp /usr/lib64/libpng12.so* /usr/lib/

解决完后重新执行./configure进行编译前的配置

如果报configure: error: libjpeg.(a|so) not found错误解决方法和上面的解决方法类似。具体操作如下:

# rpm -qa | grep libjpeg #查询是否安装

# locate libjpeg.so

# cp -rfp /usr/lib64/libjpeg.so* /usr/lib/

  1. 重新进行configure
  2. #make && make install
  3. # cp php.ini-production /usr/local/php5/php.ini
  4. # ln -s /usr/local/php5/bin/* /usr/local/bin/
  5. # ln -s /usr/local/php5/sbin/* /usr/local/sbin/
  1. 安装ZendGuardLander
    1. #tar xf ZendGuardLoader-php-5.3-linux-glibc23-x86_64.tar.gz
    2. #cd ZendGuardLoader-php-5.3-linux-glibc23-x86_64
    3. # cp php-5.3.x/ZendGuardLoader.so /usr/local/php5/lib/php/
    4. # vim /usr/local/php5/php.ini

      zend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so

  2. 配置Nginx支持PHP环境:

若要让Nginx能够解析PHP网页,有两种方法可以选择;其一,充当中介,将访问PHP页面的WEB请求转交给其他服务器(LAMP)去处理;其二,通过使用PHP的FPM模块来调用本机的PHP环境

如果选用FPM方式,则需要先启动php-fpm进程,以便监听PHP解析请求。参考范例建立php-fpm.conf配置文件,并修改其中的PID文件、运行用户、服务数(进程数量)等相关设置,然后启动php-fpm程序即可(默认监听本机的9000端口)

# cd /usr/local/php5/etc/

# cp php-fpm.conf.default php-fpm.conf

# vim php-fpm.conf

# /usr/local/sbin/php-fpm #启动php-fpm

# netstat -tunlp | grep php-fpm

在php-fpm.conf文件中,pid配置行指出了PID信息的存放位置,对应的实际路径为/usr/local/php5/var/run/php-fpm.pid,根据上述信息,可以修改Nginx服务脚本,以便在启动/停止Nginx服务器时将php-fpm进程也自动启动/停止。

# vim /etc/init.d/nginx

#!/bin/bash

#!/bin/bash

#chkconfig: 2345 67 23

#description:this script for nginx stop or start or restart or reload

CMDPATH="/usr/local/nginx/sbin/nginx"

PIDDIR="/usr/local/nginx/logs/nginx.pid"

FPMPATH="/usr/local/php5/sbin/php-fpm"

FPMPID="/usr/local/php5/var/run/php-fpm.pid"

[ -f /etc/init.d/functions ] && . /etc/init.d/functions

Usage(){

echo "Usage: $0 start|stop|reload|restart|configtest"

exit

}

Start(){

if [ ! -e ${PIDDIR} ];then

${CMDPATH}

${FPMPATH}

action "Nginx starting..." /bin/true

else

echo "Nginx is running..."

exit

fi

}

Stop(){

if [ -e ${PIDDIR} ];then

kill -s QUIT $(cat ${PIDDIR})

kill -s QUIT $(cat ${FPMPID})

action "Nginx is stopping..." /bin/true

else

echo "Nginx stopped..."

exit

fi

}

 

Restart(){

Stop &>/dev/null

Start &>/dev/null

action "Nginx restarted..." /bin/true

}

Reload(){

kill -s HUP $(cat ${PIDDIR})

kill -s HUP $(cat ${FPMPID})

action "Nginx reload" /bin/true

}

Configtest(){

${CMDPATH} -t

}

if [ $# -ne 1 ];then

Usage

exit

fi

case "$1" in

start)

Start

;;

stop)

Stop

;;

restart)

Restart

;;

reload)

Reload

;;

configtest)

Configtest

;;

*)

Usage

exit

esac

这样一来,一旦启动或关闭nginx服务,php-fpm程序也会随之启动或关闭,不需要额外再启动或关闭php-fpm

  1. 配置Nginx支持PHP解析:

    ①无论是将PHP页面交给LAMP服务器去解析,还是调用本机的php-fpm进程进行解析,都需要在"server{}"配置段中添加location设置,以便指定当访问.php面页时采取何种操作。

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

location ~ .php$ { #访问php的页面段

root html; #php网页文档根目录

fastcgi_pass 127.0.0.1:9000; #php-fpm的监听地址

fastcgi_index index.php; #php的首页文件

include /usr/local/nginx/conf/fastcgi.conf;

#包括fastcgi.conf样本配置

}

  1. php页面访问测试

    # vim /usr/local/nginx/html/index.php

    <?php

    phpinfo();

    ?>

# service nginx restart #记得重启nginx,使修改配置文件生效

  1. 访问mysql数据库测试

    # vim mysqlconn.php

    <?php

    $link=mysql_connect('localhost','root','123456');

    if ($link) echo "connect to mysql success";

    mysql_close();

?>

# curl http://192.168.131.135/mysqlconn.php

  1. LNMP平台搭建web应用

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

    这样不用每次访问都输入全路径

    # mysql -uroot -p123456

    mysql> create database movie;

    mysql> grant all on movie.* to wdd@'localhost' identified by '123456';

    # tar xf SKYUC_3.2.2_Free_For_PHP5.3.tar.bz2

    # cd SKYUC_3.2.2_Free_For_PHP5.3

    # cp -r wwwroot/ /usr/local/nginx/html/movie

    #cd /usr/local/nginx/html/movie

    # chown -R nginx:nginx admincp/ data/ templates/ upload/

    在浏览器输入http://192.168.131.135/movie/install/index.php进入安装界面,点击"",在点击进入下一个页面,如下图所示

    点击"下一步:配置系统",填写好相关信息

    最后点击"立即安装",安装成功。

    为了安全,删除install目录

    # rm -rf install/

  1. 1Nginx内置了HTTP_STUB_STATUS状态统计模块,用来反馈当前的WEB访问情况。配置

    编译参数时可添加—with-http_stub_stastus_module来启用此模块。要使用Nginx的状态统计功能,除了启用内建模块以外,还需要修改nginx.conf文件,指定访问位置并打开stub_status配置。在http{}配置的server{}子配置内添加如下配置项

    1. location /statictical { #匹配任何包含/statictical的任何查询

      stub_status on; #打开状态统计功能

      access_log off; #关闭此目录的日志记录

      auth_basic "nginx status" ; #登录提示

      auth_basic_user_file /usr/local/nginx/.htpasswd ;

      #存用户密码的的文件

    }

    1. # yum -y install httpd
    2. # chkconfig httpd off
    3. #输入密码即可

    4. # mkdir /usr/local/nginx/statictical
    5. #service nginx restart #重启服务
    6. 输入用户名和密码,进入页面

      Active connections: 1

      server accepts handled requests

      7 7 12

      Reading: 0 Writing: 1 Waiting: 0

      其中"Active connections"表示当前的活动连接数;而"server accepts handled,requests"表示已经处理的连接信息,三个数字依次表示已处理的连接数、成功的TCP握手次数、已处理的请求数.

2、客户端访问控制

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

在客户机192.168.216.233上输入http://192.168.131.135/statictical/,发现无法访问了

注:allow 允许规则,deny拒绝规则;规则的执行是按从上向下执行,匹配某条规则后将不再检查其他规则。

  1. 使用Nginx搭建虚拟主机服务器时,每个虚拟WEB站点拥有独立的"server {}"配置段,各自监听的IP地址、端口号可以单独指定,当然网站名称也是不同的。

    1. #mkdir /usr/local/nginx/taobao
    2. #mkdir /usr/local/nginx/sina
    3. # echo "www.taobao.com" >> /usr/local/nginx/taobao/index.html
    4. # echo "www.sina.com" >> /usr/local/nginx/sina/index.html
    5. # vim /etc/hosts

  1. # curl www.taobao.com
  2. # curl www.sina.com

  1. 案例3nginx+openssl实现https传输加密

1、查看是否已经安装 ssl,没有的话,重新编译安装

# /usr/local/nginx/sbin/nginx –V

# yum -y install pcre-devel zlib-devel openssl-devel

# tar xf nginx-1.7.7.tar.gz

# cd nginx-1.7.7

# useradd -M -s /sbin/nologin nginx

# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-ipv6

# make

# make install

# /usr/local/nginx/sbin/nginx

]# netstat -tunlp | grep 80

2、生成 key

# cd /usr/local/nginx/conf/

# openssl genrsa -des3 -out server.key 1024 #输入密码即可

genrsa 生成rsa类型的秘钥

-des3 指定算法

-out 输出秘钥

1024 指定输出文件的大小

3、生成证书

# openssl req -new -key server.key -out server.csr

req -new产生一个新的证书 -key 之前生成的秘钥 –out输入的证书

填写好相关信息

# cp server.key server.key.bak #将秘钥备份一下,防止丢失

# openssl rsa -in server.key.bak -out server.key #重新输出一下新密钥

# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt #生成自签证书

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

server {

listen 443; https的监听端口为443

server_name localhost;

ssl on;

ssl_certificate /usr/local/nginx/conf/server.crt;

ssl_certificate_key /usr/local/nginx/conf/server.key;

# killall -9 nginx

# /usr/local/nginx/sbin/nginx

在浏览器输入https://192.168.131.130/,弹出如下对话框:

点击"我已充分了解可能的风险"->"添加例外—获取证书—确认安全例外"即可以访问页面

小结:当配置文件修改这个值worker_connections 1024超过1024时,实际上如果系统没有用#ulimit 50000进行设置的话是不生效的,两边都得改,要想开机每次生效,可以将其写入/etc/rc.d/rc.local

Nginx的location

基本语法:
location [=|~|~*|^~] /uri/ { … }

=    表示做精确匹配
~ :为区分大小写匹配
~*: 为不区分大小写匹配
!~ :和 !~* 分别为区分大小写不匹配及不区分大小写不匹配

正则表达式匹配,其中:
文件及目录匹配,其中:
-f 和 !-f 用来判断是否存在文件
-d 和 !-d 用来判断是否存在目录
-e 和 !-e 用来判断是否存在文件或目录
-x 和 !-x 用来判断文件是否可执行

示例1:

location = / {
# 只匹配 / 查询。
}

location / {

#匹配任何查询,因为所有请求都已 / 开头。但是正则表达式规则和长的块规则将被优先查询匹配

}

示例2:

location ^~ /images/ {
# 匹配任何以 /images/ 开头的任何查询并且停止搜索。任何正则表达式将不会被测试。
}

示例3:

location ~* .(gif|jpg|jpeg)$ {
# 匹配任何以 gif、jpg 或 jpeg 结尾的请求。
}

配置文件讲解:

在Nginx服务器的主配置文件nginx.conf中,包括全局配置、I/O事件配置、HTTP配置这三大块内容,配置语句的格式为"关键字值;"(末尾以分号表示结束),以"#"开始的部分表示注释。

1)全局配置

由各种配置语句组成,不使用特定的界定标记。全局配置部分包括运行用户、工作进程数、错误日志、PID存放位置等基本设置。

常用配置项:

#user nobody;

//运行用户,Nginx的运行用户实际是编译时指定的nginx,若编译时未指定则默认为nobody

worker_processes 2;

//指定nginx启动的工作进程数量,建议按照cpu数目来指定,一般为它的倍数

worker_cpu_affinity 00000001 00000010;

//为每个进程分配cpu,上例中将2个进程分配到两个cpu,当然可以写多个,或者将一个

进程分配到多个cpu

worker_rlimit_nofile 102400;

//这个指令是指当一个nginx进程打开的最多文件数目,理论值应该是最多打开文件数(ulimit

-n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值

保持一致。(通过"ulimit –n 数值"可以修改打开的最多文件数目)

error_log logs/error.log; //全局错误日志文件的位置

pid logs/nginx.pid; //PID文件的位置

2) I/O事件配置:

使用"events {}"界定标记,用来指定Nginx进程的I/O响应模型,每个进程的连接数等设置

events {

use epool; //使用epool模型,对于2.6以上的内核,建议使用epool模型以提高性能

worker_connections 4096; //每个进程允许的最多连接数(默认为1024),每个进程的连接数应根据实际需要来定,一般在10000以下,理论上每台nginx服务器的最大连接数为worker_processes*worker_connections,具体还要看服务器的硬件、带宽等。

}

3)HTTP配置

使用"http{}"界定标记,包括访问日志、HTTP端口、网页目录、默认字符集、连接保持、以

及虚拟主机、PHP解析等一系列设置。其中大部分配置语句包含在子界定标记"servier {}"内。

http {
#设定mime类型,即conf/目录下的mime.types文件中的设定。
include mime.types;
default_type application/octet-stream;
#设定日志格式
log_format main '$remote_addr - $remote_user [$time_local]'
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$gzip_ratio"';
log_format download '$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$http_range" "$sent_http_content_range"';
#设定access log
access_log logs/access.log main;
sendfile on; //支持文件发送(下载)
keepalive_timeout 65; //连接保持超时
#设定虚拟主机
server { //用来配置虚拟主机
listen 80; //WEB服务的监听设置,可以采用"IP地址:端口"形式
server_name www.lnmp.com;//网站名称可以写多个名称,用空格分隔

location / { //表示如何匹配后面的路径的

index index.html; //默认首页

root html; //网页根目录位置,默认为Nginx安装目录下的html/子目录,root语句用来设置特定访问位置的网页文档路径,根据需要可改为/var/www/html等其他路径。

}
charset gb2312; //网页的默认字符集
#设定本虚拟主机的访问日志
access_log logs/www.lnmp.com.access.log main;

error_page 500 502 503 504 /50x.html; //内部错误的反馈页面

location = /50x.html {

root html;

}
}
}

 

 

 

原文地址:https://www.cnblogs.com/fengyutech/p/4937384.html