Nginx是一款轻量的异步Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。

Nginx的处理连接方式与apache的模式类似,nginx通过主进程master产生多个子进程worker,然后每个worker产生很多的线程,由线程去处理具体的请求,处理速度快的原因是因为处理方式为异步处理。

LNMP环境搭建

Nginx与Apache对比:

轻量级,同样起web 服务,比apache 占用更少的内存及资源

抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资 源低消耗高性能

高度模块化的设计,编写模块相对简单

社区活跃,各种高性能模块出品迅速啊


Nginx与apache、lighttp性能综合对比,如下图:

LNMP环境搭建


一.系统需求:

CentOS/RHEL/Fedora/Debian/Ubuntu系统

需要3GB以上硬盘剩余空间

MySQL 5.6及MariaDB 10必须1G以上内存

Selinux 必须关 

Linux下区分大小写,输入命令时请注意!

确定yum源正常使用!


二.安装步骤:

下载并安装LNMP一键安装包:

#tar -xvf lnmp1.2-full.tar.gz

#cd lnmp1.2-full

#./install.sh lnmp

安装LNMP执行:wget -c http://soft.vpser.net/lnmp/lnmp1.2-full.tar.gz && tar xvf lnmp1.2-full.tar.gz && cd lnmp1.2-full && ./install.sh lnmp

如需要安装LNMPA或LAMP,将./install.sh 后面的参数替换为lnmpalamp即可。

按上述命令执行后,会出现如下提示:

LNMP环境搭建


需要设置MySQL的root密码(不输入直接回车将会设置为root),输入后回车进入下一步,如下图所示:

LNMP环境搭建


这里需要确认是否启用MySQL InnoDB,如果不确定是否启用可以输入 y ,输入 y 表示启用,输入 n 表示不启用。默认为y 启用,输入后回车进入下一步,选择MySQL版本:

LNMP环境搭建


输入MySQL或MariaDB版本的序号,回车进入下一步,选择PHP版本:

LNMP环境搭建


输入PHP版本的序号,回车进入下一步,选择是否安装内存优化:

LNMP环境搭建


可以选择不安装、Jemalloc或TCmalloc,输入对应序号回车。

如果是LNMPA或LAMP的话还需要设置管理员邮箱

LNMP环境搭建


再选择Apache版本

LNMP环境搭建

提示"Press any key to install...or Press Ctrl+c to cancel"后,按回车键确认开始安装。

LNMP脚本就会自动安装编译Nginx、MySQL、PHP、phpMyAdmin、Zend Optimizer这几个软件。


安装完成

如果显示Nginx: OK,MySQL: OK,PHP: OK

LNMP环境搭建


并且Nginx、MySQL、PHP都是running,80和3306端口都存在,并Install lnmp V1.2 completed! enjoy it.的话,说明已经安装成功。

安装失败

LNMP环境搭建


如果出现类似上图的提示,则表明安装失败,说明没有安装成功!!

执行./uninstall进行卸载

LNMP相关软件安装目录

Nginx 目录: /usr/local/nginx/

MySQL 目录 : /usr/local/mysql/

MySQL数据库所在目录:/usr/local/mysql/var/

PHP目录 : /usr/local/php/

PHPMyAdmin目录 : /home/wwwroot/default/phpmyadmin/

默认网站目录 : /home/wwwroot/default/

Nginx日志目录:/home/wwwlogs/

 

LNMP相关配置文件位置:

Nginx主配置文件:/usr/local/nginx/conf/nginx.conf

MySQL配置文件:/etc/my.cnf

PHP配置文件:/usr/local/php/etc/php.ini

php-fpm配置文件:/usr/local/php/etc/php-fpm.conf

LNMP状态管理命令:

LNMP 状态管理: lnmp {start|stop|reload|restart|kill|status}

LNMP 各个程序状态管理: lnmp {nginx|mysql|mariadb|php-fpm|pureftpd} {start|stop|reload|restart|kill|status}

 

配置文件

#vi /usr/local/nginx/conf/nginx.conf

user  www www;

#程序运行用户和组

worker_processes auto;

#启动进程,指定nginx启动的工作进程数量,建议按照cpu数目来指定,一般等于cpu数目

error_log  /home/wwwlogs/nginx_error.log  crit;

#全局错误日志

pid        /usr/local/nginx/logs/nginx.pid;

#主进程PID保存文件

#Specifies the value for maximum file descriptors that can be opened by this process. 

worker_rlimit_nofile 51200;

#文件描述符数量

events 

       {

       use epoll;     

#使用epoll模型,对于2.6以上的内核,建议使用epoll模型以提高性能

worker_connections 51200;

#工作进程的最大连接数量,根据硬件调整,和前面工作进程配合起来用,尽量大,但是别把cpu跑到100%就行每个进程允许的最多连接数, 理论上每台nginx服务器的最大连接数为worker_processes*worker_connections,具体还要看服务器的硬件、带宽等。

multi_accept on;

   

       }

http 

#整体环境配置--网站配置

       {

                     include       mime.types;

                     default_type  application/octet-stream;

                     #设定mime类型,文件传送类型由mime.type文件定义

                     server_names_hash_bucket_size 128;            

                            #保存服务器名字的hash表大小

                     client_header_buffer_size 32k;               

                            #客户端请求头部缓冲区大小

                     large_client_header_buffers 4 32k;                

                            #最大客户端头缓冲大小

                    client_max_body_size 50m;                          

                            #客户端最大上传文件大小(M)

 

                     sendfile on;

                            #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,必须设为 on。如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.

                     tcp_nopush     on;

                            #这个是默认的,结果就是数据包不会马上传送出去,等到数据包最大时,一次性的 ,传输出去,这样有助于解决网络堵塞。(只在sendfile on时有效)

                     keepalive_timeout 60;

                            #连接超时时间

                     tcp_nodelay on;

                            #禁用nagle算法,也即不缓存数据。有效解决网络阻塞

                fastcgi_connect_timeout 300;

                fastcgi_send_timeout 300;

                fastcgi_read_timeout 300;

                fastcgi_buffer_size 64k;

                fastcgi_buffers 4 64k;

                fastcgi_busy_buffers_size 128k;

                fastcgi_temp_file_write_size 256k;

                            #fastcgi设置

 

                gzip on;

                gzip_min_length  1k;

                gzip_buffers     4 16k;

                gzip_http_version 1.1;

                gzip_comp_level 2;

                gzip_types     text/plain application/javascript                                                          application/x-javascript text/javascript text/css application/xml                         application/xml+rss;

                 gzip_vary on;

                 gzip_proxied   expired no-cache no-store private auth;

                 gzip_disable   "MSIE [1-6]\.";

 

                  #limit_conn_zone $binary_remote_addr zone=perip:10m;

                  #If enable limit_conn_zone,add "limit_conn perip 10;" to server                      section.

                server_tokens off;

                     #隐藏nginx版本号(curl -I 192.168.4.154可以查看,更加安全)

 

                 #log format

                      log_format  access  '$remote_addr - $remote_user [$time_local]                          "$request" '

                  '$status $body_bytes_sent "$http_referer" '

                  '"$http_user_agent" $http_x_forwarded_for';

 

 

                            #定义日志格式

server

        {

                listen 80 default_server;

                      #listen [::]:80 default_server ipv6only=on;

                      #监听80端口,WEB服务的监听设置,可以采用"IP地址:端口"形式

                server_name www.lnmp.org;

                      #服务器名,可以写多个域名,用空格分隔

                index index.html index.htm index.php;

                     #默认网页文件

                root  /home/wwwroot/default;

                     #网页主目录

 

#error_page   404   /404.html;

include enable-php.conf;

               

location /nginx_status

        {

            stub_status on;

            access_log   off;

        }

 

 

 

#开启status状态监测

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

        {

            expires      30d;

        }

#静态文件处理,保存期30天

location ~ .*\.(js|css)?$

        {

            expires      12h;

        }

#js和css文件处理,保存期12小时

location ~ /\.

        {

            deny all;

        }

 

 access_log  /home/wwwlogs/access.log  access;

#正确访问日志

 }

include vhost/*.conf;

#vhost/下子配置文件生效

 

}

 

检查nginx配置文件语句错误

/usr/local/nginx/sbin/nginx -t

 

平滑重启nginx进程  

1)pkill -HUP nginx

2)/usr/local/nginx/sbin/nginx -s reload

 

配置实验

1.nginx状态监控

location /nginx_status{

        stub_status on;

        access_log  off;

        }

#客户端访问网址:http://IP/nginx_status

注:"Active connections"表示当前的活动连接数;

"server accepts handled requests"表示已经处理的 连接信息

三个数字依次表示已处理的连接数、成功的TCP握手次数、已处理的请求数

LNMP环境搭建


nginx虚拟主机

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

---基于域名的虚拟主机---

 

 

两个站点www.benet.comwww.accp.com

192.168.1.1   www.benet.com

192.168.1.1   benet.com

192.168.1.1   www.accp.com

192.168.1.1   accp.com

 

修改Linux下和windows下的hosts文件,使其能正常解析域名

为两个虚拟WEB主机分别建立网页根目录,并准备测试首页

mkdir  -p /home/wwwroot/benet/

mkdir  -p /home/wwwroot/accp/

 

修改nginx.conf配置文件---> 建立域名虚拟主机

配置两个"server {}"区域,分别对应两个WEB站点,指定各自的网站名称、监听    地址、       网站根目录、访问日志等信息。

在主配置文件当中添加两个虚拟主机的配置信息(添加在http { }范围内

server {

        listen       80;

        server_name  www.benet.com benet.com;

        charset utf-8;

access_log  logs/benet.access.log;

        location / {

            root   /home/wwwroot/benet;

            index  index.php  index.html;

}

}

server {

        listen       80;

        server_name  www.accp.com accp.com;

        charset utf-8;

access_log  logs/accp.access.log;

        location / {

            root   /home/wwwroot/accp;

            index  index.html  index.php;

}       

}

LNMP环境搭建


重新启动nginx,使用浏览器分别通过www.benet.com和www.accp.com访问 两个WEB站点

结果:

LNMP环境搭建

LNMP环境搭建

LNMP环境搭建

LNMP环境搭建


列表页显示

server

        {

                listen       80;

                server_name www.benet.com;

                index index.html index.htm index.php;

                root  /home/wwwroot/benet;

                autoindex on;

LNMP环境搭建

LNMP环境搭建

LNMP环境搭建

rewrite

location ~ \.php$ {

        proxy_pass   http://127.0.0.1;

        }


例1:域名跳转

输入www.benet.com,跳转到www.accp.com

server {

        listen       80;

        server_name  www.benet.com benet.com;

        charset utf-8;

access_log  logs/benet.access.log  access;

        location / {

            root   /home/wwwroot/benet;

            index  index.php  index.html;

}

if  ($http_host = www.benet.com) {

                        rewrite  (.*)  http://www.accp.com  permanent;

                }

}

LNMP环境搭建

LNMP环境搭建

例2:文件跳转

server {

        listen       80;

        server_name  www.accp.com accp.com;

        charset utf-8;

access_log  logs/benet.access.log  access;

        location / {

            root   /home/wwwroot/accp;

            index  index.html  index.php;

}   

rewrite inde /indexa.html last;   

}


基于多个IP地址的虚拟主机:

 

配置多个ip地址(可使用一个网卡绑定多个IP如:eth0:1…)

LNMP环境搭建


修改配置文件:(nginx.conf)

server

        {

                listen 192.168.115.180:80;

                server_name 192.168.115.180;

                access_log      logs/180.access.log combined;

                location /

                {

                        index index.html index.htm;

                        root /home/wwwroot/180;

                }

        }

server

        {

                listen 192.168.115.181:80;

                server_name 192.168.115.181;

                access_log      logs/181.access.log combined;

                location /

                {

                        index index.html index.htm;

                        root /home/wwwroot/181;

                }

        }

LNMP环境搭建

LNMP环境搭建


基于不同端口的虚拟主机:

LNMP环境搭建

LNMP环境搭建

LNMP环境搭建


Rpm包安装的Lamp中Apache网址别名定义:

LNMP环境搭建

LNMP环境搭建

LNMP环境搭建