nginx简单配置以及安装wordpress实验

除了httpd可以作为WEB服务的应用之外,肯定还有其他应用,虽然httpd市场占有率是排位第一,但是在httpd也有不可避免的小缺点,比如程序过大、服务并发数并不是很高等,所以这篇文章开始我来写写关于nginx的应用:

什么是nginx?

nginx由Igor Sysoev研发,是目前世界上占有率前三的Web服务器软件。 Nginx是一款轻量级的Web服务器,可实现反向代理,URL rewrite等功能。Nginx拥有消耗内存小、可支持高并发连接达5W个、还支持热部署、高性能的网络IO模型等特性。从nginx之上也有很多二次研发版本,比如淘宝的tengine。现在nginx已经开始提供企业软件进行收费!

nginx的基本架构:

nginx分为两个进程,而且互不相关。一个就是worker进程、还有一个就是master主进程了!

事件驱动:epoll(linux)边缘触发、kqueue(unix)、/dev/poll

变用器:select,poll,rtsignal

支持sendfile,sendfile64,支持AIO,支持mmap

nginx的工作模式:

非阻塞、事件驱动、nginx会按需同时运行多个进程:一个主进程(master)和几个工作进程(worker),配置了缓存时还会有缓存加载器进程(cache loader)和缓存管理器进程(cache manager)等。所有进程均是仅含有一个线程,并主要通过“共享内存”的机制实现进程间通信。主进程以root用户身份运行,而worker、cache loader和cache manager均应以非特权用户身份运行。公式为worker*n
在设计的最初阶段,nginx的主要着眼点就是其高性能以及对物理计算资源的高密度利用,因此其采用了不同的架构模型。受启发于多种操作系统设计中基于“事件”的高级处理机制,nginx采用了模块化、事件驱动、异步、单线程及非阻塞的架构,并大量采用了多路复用及事件通知机制。在nginx中,连接请求由为数不多的几个仅包含一个线程的进程worker以高效的回环(run-loop)机制进行处理,而每个worker可以并行处理数千个的并发连接及请求。说了这么多nginx好听的话,那么下面就应该说说如何安装了!

安装nginx:

安装一共有两种方式,在centos中可以进行源码编译安装(推荐,因为可以编译第三方模块)、还能能够使用yum的方式进行安装(前提:必须要安装epel源,不是特别推荐因为这样就没法进行编译第三方模块了!)

编译安装前期准备:

[root@localhost ~] yum install -y gcc openssl-devel pcre-devel #安装相关依赖包

随后别忘了在官网下载nginx的源码包,并且使用tar解压,下面看看nginx的官网:www.nginx.org 在download中有相关版本对应下载,现在稳定版本已经有1.10了!

编译安装:

[root@localhost nginx-1.8.1] ./configure --help #查看编译帮助,其中选项比较少所以还是一个一个看看比较好!
[root@localhost nginx-1.8.1]# groupadd -r nginx
[root@localhost nginx-1.8.1]# useradd -r -g nginx nginx
#添加一个nginx的用户和组并且给予管理员权限、
[root@localhost var]# ./configure \
         --prefix=/usr/local/nginx \
         --conf-path=/etc/nginx/nginx.conf \
         --error-log-path=/var/log/nginx/error.log \
         --http-log-path=/var/log/nginx/access.log \
         --pid-path=/var/run/nginx/nginx.pid \
         --lock-path=/var/lock/nginx.lock \
         --user=nginx \
         --group=nginx \
         --with-http_ssl_module \
         --with-http_flv_module \
         --with-http_stub_status_module \
         --with-http_gzip_static_module \
         --http-client-body-temp-path=/usr/local/nginx/client/ \
         --http-proxy-temp-path=/usr/local/nginx/proxy/ \
         --http-fastcgi-temp-path=/usr/local/nginx/fcgi/ \
         --http-uwsgi-temp-path=/usr/local/nginx/uwsgi \
         --http-scgi-temp-path=/usr/local/nginx/scgi \
         --with-pcre
#上述编译的内容还是十分简单的,简名知意!
[root@localhost var]# make -j 4 && make install #nginx十分轻量级所以编译会非常快

添加环境变量,让nginx能够使用nginx命令:

[root@localhost nginx-1.8.1]# vi /etc/profile.d/nginx.sh
#在文档中添加:export PATH=/usr/local/nginx/sbin:$PATH
[root@localhost nginx-1.8.1]# source /etc/profile.d/nginx.sh

如果需要启动 | 停止脚本的可以将下面的脚本复制到/etc/rc.d/init.d/nginx中(需要创建这个文件)

#!/bin/sh
#
# nginx – this script starts and stops the nginx daemon
#
# chkconfig: – 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /etc/nginx/nginx.conf
# config: /etc/sysconfig/nginx
# pidfile: /var/run/nginx.pid

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ “$NETWORKING” = “no” ] && exit 0

nginx=”/usr/local/nginx/sbin/nginx”
prog=$(basename $nginx)

NGINX_CONF_FILE=”/usr/local/nginx/nginx.conf”

[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

lockfile=/var/lock/subsys/nginx

make_dirs() {
# make required directories
user=`nginx -V 2>&1 | grep “configure arguments:” | sed ‘s/[^*]*–user=\([^ ]*\).*/\1/g’ -`
options=`$nginx -V 2>&1 | grep ‘configure arguments:’`
for opt in $options; do
if [ `echo $opt | grep ‘.*-temp-path’` ]; then
value=`echo $opt | cut -d “=” -f 2`
if [ ! -d “$value” ]; then
# echo “creating” $value
mkdir -p $value && chown -R $user $value
fi
fi
done
}

start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
make_dirs
echo -n $”Starting $prog: ”
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}

stop() {
echo -n $”Stopping $prog: ”
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}

restart() {
configtest || return $?
stop
sleep 1
start
}

reload() {
configtest || return $?
echo -n $”Reloading $prog: ”
killproc $nginx -HUP
RETVAL=$?
echo
}

force_reload() {
restart
}

configtest() {
$nginx -t -c $NGINX_CONF_FILE
}

rh_status() {
status $prog
}

rh_status_q() {
rh_status >/dev/null 2>&1
}

case “$1″ in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $”Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}”
exit 2
esac

复制好以后首先给予权限:chmod +x /etc/rc.d/init.d/nginx 随后执行chkconfig –add nginx

关于nginx命令:

其实关于nginx的启动脚本其实无需创建,直接添加完环境变量之后使用nginx命令就能够对nginx进行操作了。基本语法:

nginx [OPTION] [COMMAND]

单一使用nginx可以启动nginx进程
-t 测试配置文件各个组件是否可以正常启动
-s 给予信号,信号有:stop reload quit reopen
-h 查看帮助,除了上述的这些使用帮助能查看更多用法

关于配置文件详解:

配置文件在/etc/nginx/nginx.conf之中,配置文件的总体分类为:

main配置段:全局配置段!
event{}配置段:定义event模型工作特性!
http{}配置段:定义http协议相关的配置! 其实http的配置段是经常需要配置的,里面包括location字段、server字段等!

说了这么多理论的东西,下面我以安装wordpress来从实战角度出发给大家来讲解配置文件的用法!

安装wordpress前提:

光是安装nginx是不够的,wordpress是动态站点,所以我们要架构一个LNMP。也就是说我们现在还差mariadb和php的程序,这些程序我也要进行编译安装。


编译安装mariadb我这里就不说了,不过mairadb可以使用二进制格式包进行安装,详细可以看这里。不过编译安装php我这边还是要说一下,因为nginx比较轻量级所以只支持fastcgi协议来交付动态请求,所以编译安装php的时候需要php-fpm。

编译php:

[root@localhost php-5.6.20] yum install -y bzip2-devel libmcrypt-devel libxml2-devel libmcrypt libmcrypt-devel mhash mhash-devel libjpeg-devel libpng-devel freetype-devel
#上面是安装相关依赖包
[root@localhost php-5.6.20]# ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --enable-sockets --enable-fpm --with-mcrypt --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2 --with-gd
#上面是编译的选项!

编译完毕以后还得配置php-fpm的相关选项,上述的编译过程比较简单,我记得在这一期有提到过使用php-fpm可以仔细的看看!

配置php-fpm:

[root@localhost php-5.6.20]# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
#复制脚本文件
[root@localhost php-5.6.20]# chmod +x /etc/rc.d/init.d/php-fpm
#添加执行权限
[root@localhost php-5.6.20]# chkconfig --add php-fpm
[root@localhost php-5.6.20]# chkconfig php-fpm on
#第一个是添加脚本文件、第二个让php-fom开机启动
[root@localhost php-5.6.20]# cp php.ini-production /etc/php.ini
#为php提供配置文件
[root@localhost php-5.6.20]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
#为php-fpm提供配置文件

修改php-fpm:

编辑配置文件php-fpm.conf 主要修改三个地方,第一个是pid文件位置(不过也可以省略),第二个是用户和组修改为nginx(其实也可以省略),第三个就是控制子进程的参数:可以修改为我这里的样子:

pm.max_children = 50 #子进程最大数
pm.start_servers = 5 #启动时的进程数
pm.min_spare_servers = 2 #保证空闲进程数最小值,如果空闲进程小于此值,则创建新的子进程
pm.max_spare_servers = 8 #保证空闲进程数最大值,如果空闲进程大于此值,则进行清理

当然除此之外有需要的话可以修改监地址和端口,我的建议就是如果php和nginx主机分开的话就修改,否则没必要使用这个风险!

启动php-fpm:直接使用systemctl start php-fpm 使用ss -tnl查看是否监听在127.0.0.1:9000

安装wordpress:

在安装之前首先我得配置nginx的配置文件,我想将wordpress放到/var/www之中。

下面是我写的配置文件,这个配置文件是我重新写的所以和原来的有所区别,如果喜欢自虐的也可以自己手动写!

user nginx nginx; #写明用户和组,只用一个user表示即可
worker_processes 4; #打开的worker进程个数,通常略少于CPU核心数或者与其相当等
pid /var/run/nginx/nginx.pid; #pid文件放置的位置
events {
worker_connections 1024; #设定work进程能够处理的最大并发量,我这边写的好小,其实大家完全写个65535也没问题,注意这个配置必须包裹在events之中
}
http { #http的字段
include mime.types; #这个选项必须添加,如果不包括mime.types配置文件就无法加载js、css图片等内容只能加载文字,切记切记!
default_type application/octet-stream;
log_format commonlog ‘$remote_addr – $remote_user [$time_local] “$request” ‘
‘$status $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” “$http_x_forwarded_for”‘; #这些都是定义日志的。
sendfile on; #是否打开文件传递,对动态网站很有用,这个传送文件不是想象中的上传和下载文件。
keepalive_timeout 65; #回话连接保持的时间,这个必须开启如果你有下载业务的话!

server{ #添加一个server虚拟主机
listen 80;
server_name 172.16.1.30;
root “/var/www/wordpress”; #定义根文件
index index.php index.html; #主页定义
error_log /var/log/nginx/error.log notice; #错误日志定义
access_log /var/log/nginx/access.log; #访问日志定义
#fastcgi_buffers 512 64k; #这个是fastcgi设定最大可接受的字节数,其实可以不用填写

#location ~ [^/]\.php(/|$) { #下面的fastcgi location有两种方法来配置fastcgi

location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/wordpress$fastcgi_script_name;
#include fastcgi.conf;
include fastcgi_params;
}

}

}

以上是可用的配置文件,如果懒得研究可以直接复制到配置文件就能运行wordpress。不过我的配置文件使用的fastcgi功能一共有两种,所以想继续了解fastcgi的可以接着往下看!

fastcgi的两种配置方法:

第一种方案:

location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000; #php-fpm监听的地址和端口
fastcgi_index index.php; #index的主页名
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; #动态文件使用的目录,将/scripts改为使用的目录或者在之前定义root然后使用$document_root
include fastcgi_params; #加载的选项定义,加载fastcgi_param

第二种方案:

location ~ [^/]\.php(/|$) {
#location ~ \.php$ { #其实也可以用这个location进行匹配
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf; #直接将加载的选项定义在配置目录中的fastcgi.conf文件,不过如果你的动态目录和静态目录不同请写root选项来定义根目录!
}

总结:第一种方案其实就是将fastcgi协议定义到总配置文件中,而第二种方案大家如果又需要可以在fastcgi的配置文件中定义完毕,直接使用include加载即可!

接下来启动看一下是否ok?

启动nginx查看wordpress是否OK?

[root@localhost wordpress]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: [emerg] open() "/var/run/nginx/nginx.pid" failed (2: No such file or directory)
nginx: configuration file /etc/nginx/nginx.conf test failed
#提示没有路径/var/run/nginx
[root@localhost wordpress]# mkdir /var/run/nginx
[root@localhost wordpress]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
#上面显示成功
[root@localhost wordpress]# nginx
#不放心的可以使用ss -tnl查看是否监听端口

接下来打开网页输入网址:

nginx01

wordpress界面已经出现,接下来大家自己搞定吧!不过好像nginx不止这些功能啊,对的还有其他的功能和配置我放在以后说!

Comments

Leave a Reply

Your email address will not be published. Name and email are required