漫漫运维路——Nginx基础


Nginx是当今最流行的WEB服务器一,其特性主要有以下几点:

1.模块化设计、较好的扩展性

Nginx虽然支持模块化,但尚不能向HTTPD那样支持动态模块加载

2.高可靠

Nginx工作时,由主控进程master直接生成多个worker进程,主控进程负责解析配置文件,并启动子进程,子进程直接负责处理客户端连接请求。

3.低内存消耗

Nginx采用了分阶段资源分配技术,使得其cpu和内存占用率极低,官方宣称10000keepalivenginx连接只需要2.5M内存。

4.支持热部署

在不停机的情况下可更新配置文件、实现日志滚动甚至更新程序版本。

5.支持事件驱动机制、AIOmmap

Nginx能很好地支持事件驱动机制、异步IO机制和内存映射机制

Nginx的重要功能:

1.成为静态资源的WEB服务器

Nginx也可以向HTTPD一样成为静态页面服务器,但需要安装http模块

2.支持httpsmtppop3协议的反向代理

可设置Nginx把来自基于httpsmtppop3协议的请求修改后发送给其他服务器。

3.支持缓存和负载均衡机制

支持缓存加速且可把来自客户端的请求发送给后端的多台服务器,以实现负载均衡的机制。

4.支持FCGIUWCGI模块

可以基于FCGI模式把动态内容发送给后端的php服务器,或者基于UWCGI模式把python编写的WEB应用程序发给后端的python解释服务器。

5.支持SSL

可以基于SSL提供HTTPS服务

接下来就将对Nginx的配置以实验的方式进行演示

场景一:Nginx扮演静态页面服务器的角色工作

1.配置各种虚拟主机

1) 编辑配置文件/etc/nginx/nginx.confhttp{}部分内添加如下内容

server {
        listen 172.16.35.4:80;
        server_name www.nginx.com;
        root "/var/nginx/nginx.com";
        index index.html index.php;
}
server {
        listen 172.16.35.6:80;
        server_name www.nginx1.com;
        root "/var/nginx/nginx.com1";
        index index.html index.php;
}
server {
        listen 172.16.35.6:8080;
        server_name www.nginx2.com;
        root "/var/nginx/nginx.com2";
        index index.html index.php;
}
server {
        listen 172.16.35.4:80;
        server_name www.nginx3.com;
        root "/var/nginx/nginx.com3";
        index index.html index.php;
}

(2) 新建虚拟主机目录,并提供主页和修改权限

#创建虚拟主机目录 

[root@localhost ~]# mkdir -pv /var/nginx/{nginx.com,nginx.com1,nginx.com2,nginx.com3}
mkdir: created directory `/var/nginx/nginx.com'
mkdir: created directory `/var/nginx/nginx.com1'
mkdir: created directory `/var/nginx/nginx.com2'
mkdir: created directory `/var/nginx/nginx.com3'

#:为各虚拟主机提供配置文件

[root@localhost ~]# touch "this is nginx.com">/var/nginx/nginx.com/index.html
[root@localhost ~]# echo "this is nginx.com1">/var/nginx/nginx.com1/index.html
[root@localhost ~]# echo "this is nginx.com2">/var/nginx/nginx.com2/index.html
[root@localhost ~]# echo "this is nginx.com3">/var/nginx/nginx.com3/index.html

#:修改属主和属组

[root@localhost ~]# chown -R nginx.nginx /var/nginx/

3) 配置网卡子接口和重启服务并测试

#配置网卡子接口

[root@localhost ~]# ifconfig eth0:1 172.16.35.6/16
[root@localhost ~]# ifconfig eth0:2 172.16.35.4/16

#测试nginx配置文件语法后

[root@localhost ~]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

#通知nginx重读配置文件

[root@localhost ~]# /usr/local/nginx/sbin/nginx -s reload


#测试

修改/etc/hosts



wKiom1VjPvezl_RMAADYI0NVJo4326.jpg

 

测试


wKioL1VjQJuhiO53AAGBfrcoAVk656.jpg

 

2.自定义定向错误页面和访问控制

(1) 自定义定向错误页面

修改配置文件


wKiom1VjPyCy7631AADM7vOSAbs645.jpg

 

#在根目录下新建此文件,并添加内容

[root@localhost nginx.com]# echo "o no the sources is not find you get some information from www.nginx.org">/var/nginx/nginx.com/404page.html

#测试


wKioL1VjQNPDYZW8AAD32zylPRs327.jpg

 

2)访问控制

#基于客户端的访问控制

设置拒绝物理机(172.16.250.121)访问

wKioL1VjQOiAZ9QmAABHd-mu8fc605.jpg

 

用物理机测试


wKiom1VjP3bBluVUAAEi-ja3xK8559.jpg 


#基于用户的访问控制

修改配置文件


wKioL1VjQSLi7z1fAAEkig21or0530.jpg

 

使用htpasswd命令向文件中增加用户信息


wKiom1VjP5-B5TGfAAEqqIH2eXo891.jpg

 

测试


wKioL1VjQUPDtDavAAFasrGfahY621.jpg

 


wKiom1VjP8qCiFTOAACc-tNkMBI947.jpg

 

 

(3)使用Nginx+SSL实现HTTPS

#生成证书

生成自签证书

[root@localhost CA]# (umask 077;openssl genrsa -out private/cakey.pem)
[root@localhost CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650#根据提示输入相关信息
[root@localhost CA]# touch index.txt
[root@localhost CA]# echo "01">serial
[root@localhost CA]# mkdir /etc/nginx/ssl
[root@localhost CA]# cd /etc/nginx/ssl
[root@localhost ssl]# (umsak 077;openssl genrsa -out nginx.key 2014)
[root@localhost ssl]# cd /etc/pki/CA/
[root@localhost CA]# openssl ca -in /etc/nginx/ssl/nginx.csr -out /etc/nginx/ssl/nginx.crt -days 3650

#修改配置文件

在主配置文件的http{}部分内添加如下一行 

  include /etc/nginx/conf.d/ssl.conf;

修改ssl配置文件/etc/nginx/conf.d/ssl.conf

server {
    listen       443;
    server_name www.ssl.com ;
    root /var/www/ssl
    ssl                  on;
    ssl_certificate      /etc/nginx/ssl/nginx.crt;#证书存放位置
    ssl_certificate_key  /etc/nginx/ssl/nginx.key;#私钥存放位置
    ssl_session_timeout  5m;
    ssl_protocols  SSLv2 SSLv3 TLSv1;
    ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers   on;
}

新建虚拟主机目录并为其提供主页

[root@localhost CA]# mkdir /var/www/ssl
[root@localhost CA]# echo "ssl test" >/var/www/ssl/index.html

重启服务测试

[root@localhost CA]# nginx -s reload


wKioL1VjQaLBFxv_AAFLE6sACkc315.jpg

 

场景二:反向代理动态请求至动态页面服务器

在此以Linux+Nginx+MariaDB+PHP演示如何编译安装

#编译Nginx

下载并解压Nginx源码文件到/usr/local目录下

安装pcre-devel包,有时还需要安装其他包,读者可根据提示操作即可

[root@localhost nginx-1.4.7]# yum install pcre-devel -y

添加用于运行Nginx的系统用户

[root@localhost nginx-1.4.7]# useradd -r nginx

执行./configure

./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --user=nginx --group=nginx --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 --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi

然后安装

make && make install

添加bash查找路径

[root@localhost ~]# echo "export PATH=/usr/local/nginx/sbin:$PATH" >/etc/profile.d/nginx.sh
[root@localhost ~]# . /etc/profile.d/nginx.sh

#编译PHP

解压php包后切换目录至php目录

[root@localhost php-5.4.26]# ./configure --prefix=/usr/local/php --enable-fpm --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr/ --enable-xml --enable-sockets --with-mcrypt --with-bz2 --with-config-file-path=/etc/php/php.ini --with-config-file-scan-dir=/etc/php.d/
[root@bogon php-5.6.8]# make && make install

:可能需要配置epel源安装libmcryptlibmcrypt-devel

php提供运行脚本

[root@localhost php-5.4.26]# cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
[root@localhost php-5.4.26]# chmod +x /etc/rc.d/init.d/php-fpm#:给脚本执行权
[root@localhost php-5.4.26]# chkconfig --add php-fpm#添加到chkconfig列表,[root@localhost php-5.4.26]# chkconfig php-fpm on#设置开机自启动

PHP提供配置文件

[root@localhost php-5.4.26]#  cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

编辑配置文件,修改一下几项

Pm.max_children = 50#:设置最多子进程数量为50
Pm_start_servers = 5#:设置预先启动的进程数为5个
Pm.min_spare_servers = 2#:设置最少空闲子进程数为2
Pm.max_spare_servers = 8#:设置最多空闲子进程数为8
Pid = /usr/local/php/var/run/php-fpm.pid#:设置进程文件位置

启动服务测试:

[root@localhost php-5.4.26]# service php-fpm restart



wKiom1VjQHfArGNQAACHWacOz5c413.jpg

 

Mairadb安装使用通用二进制安装即可,在此不多做介绍,可参考http://7703592.blog.51cto.com/7693592/1649948

#修改配置文件,实现LNP结合

修改Nginx主配置文件/etc/nginx/nginx.conf,启用如下配置,并修改其代理文件的位置


wKioL1VjQhzi8Jr8AAFQ1fdJ5v4254.jpg


编辑/usr/local/nginx/html/index.php,使其内容如下


wKiom1VjQKiT_JgaAABQ5Kr-tX0721.jpg


重启服务并测试

[root@localhost html]# service php-fpm restart
[root@localhost html]# nginx -s reload


wKioL1VjQkzjj-F8AAIjV9rZ8UU880.jpg

 

 

 

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章