2、作为web服务器

相比apache,nginx使用更少的资源,支持更多的并发连接,体现更高的效率。

Nginx作为负载均衡服务器:nginx既可以在内部直接支持rails和php程序对外进行服务,也可以支持http代理服务器对外进行服务。Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比较好。

作为邮件代理服务器:最早开发这个产品的目的之一也是作为邮件代理服务器。

3、nginx配置简洁,apache较复杂

Nginx静态处理性能比apache高3倍以上

4、最核心的区别在于

apache 是同步多进程模型,一个连接对应一个进程,Nginx是异步的,多个连接可以对应一个进程。

Nginx处理静态文件好,耗费内存少,只适合静态和反向。Apache在处理动态有优势,nginx并发性比较好,CPU占用内存低,如果rewrite频繁, 选用apache最佳。

总的来说,apache依然是大部分公司的首选

二、Nginx 服务基础

1.Nginx 安装及运行控制

1.编译安装Nginx

1.关闭防火墙,将安装nginx所需软件包传到/opt目录下

nginx 邮件配置 nginx搭建邮件服务器_Nginx

 

nginx 邮件配置 nginx搭建邮件服务器_Nginx_02

2.安装依赖包

nginx的配置及运行需要pcre、zlib等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件。

yum -y install pcre-devel zlib-devel gcc gcc-c++ make

nginx 邮件配置 nginx搭建邮件服务器_nginx 邮件配置_03

 3.创建运行用户、组(Nginx服务程序默认以nobody身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限)

4.编译安装Nginx

cd /opt/nginx-1.12.0/

./configure \
--prefix=/usr/local/nginx \                        #指定nginx的安装路径
--user=nginx \                                     #指定用户名
--group=nginx \                                    #指定组名
--with-http_stub_status_module                     #启用http_stub_status_module模块以支持状态统计

./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module

make -j8 && make install

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/          #让系统识别nginx的操作命令

nginx 邮件配置 nginx搭建邮件服务器_html_04

nginx 邮件配置 nginx搭建邮件服务器_Nginx_05

nginx 邮件配置 nginx搭建邮件服务器_Nginx_06

 5.检查、启动、重启、停止Nginx服务

nginx -t
#检查配置文件是否正确

nginx
##启动

##停止
cat /usr/local/nginx/logs/nginx.pid
#先查看nginx的PID号
kill -3 <PID号>
kill -s QUIT <PID号>
killall -3 nginx
killall -s QUIT nginx 

##重载
kill -1 <PID号>
kill -s HUP <PID号>
killall -1 nginx
killall -s HUP nginx

##日志分隔,重新打开日志文件
kill -USR1 <PID号>

##平滑升级
kill -USR2 <PID号>

nginx 邮件配置 nginx搭建邮件服务器_html_07

nginx 邮件配置 nginx搭建邮件服务器_nginx 邮件配置_08

nginx 邮件配置 nginx搭建邮件服务器_linux_09

nginx 邮件配置 nginx搭建邮件服务器_html_10

nginx 邮件配置 nginx搭建邮件服务器_nginx 邮件配置_11

  1. 添加 Nginx 系统服务
vim /etc/init.d/nginx

#!/bin/bash
#chkconfig: 35 99 20
#description:Nginx Service Control Script

COM="/usr/local/nginx/sbin/nginx"
PID="/usr/local/nginx/logs/nginx.pid"
case "$1" in

start)
$COM
;;

stop)
kill -s QUIT $(cat $PID)
;;

restart)
$0 stop
$0 start
;;

reload)
kill -s HUP $(cat $PID)
;;

*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1

esac
exit 0
chmod +x /etc/init.d/nginx
chkconfig --add nginx                        #添加为系统服务
systemctl stop nginx
systemctl start nginx

nginx 邮件配置 nginx搭建邮件服务器_nginx_12

 

nginx 邮件配置 nginx搭建邮件服务器_html_13

方法二

vim /lib/systemd/system/nginx.service

[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecrReload=/bin/kill -s HUP $MAINPID
ExecrStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service

nginx 邮件配置 nginx搭建邮件服务器_Nginx_14

 2.配置文件nginx.conf

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

 1. 全局配置

#user nobody;                   #运行用户,若编译时未指定则默认为nobody
worker_ processes 1;            #工作进程数量,可配置成服务器内核数* 2,如果网站访问量不大,一般设为1就够用了
#error__log logs/error.log;     #错误日志文件的位置
#pid logs/nginx.pid;            #PID文件的位置.

2. I/O 事件配置

events {
use epoll;                #使用epoll模型,2.6及以上版本的系统内核,建议使用epoll模型以提高性能
worker_connections 1024;  #每个进程处理4096个连接
}

nginx 邮件配置 nginx搭建邮件服务器_nginx 邮件配置_15

 

nginx 邮件配置 nginx搭建邮件服务器_nginx 邮件配置_16

 3.HTTP配置

http {
##文件扩展名与文件类型映射表
include         mime.types;

##默认文件类型
default_ type application/octet-stream;

##日志格式设定
#log_ format  main    '$remote_addr 一 $remote_user [$time_local] "$request" '
#                     '$status $body_bytes_sent" $http_referer"
#                     '"$http_user_agent" "$http_x_forwarded_for"';

##访问日志位置
#access_log logs/access.log main;

##支持文件发送(下载)
sendfile     on;

##此选项允许或禁止使用socket的TCP_CORK的选项(发送数据包前先缓存数据),此选项仅在使用sendfile的时候使用
#tcp_nopush       no;

##连接保持超时时间,单位是秒
#keepalive_timeout  0;
keepalive_timeout  65;

##gzip模块设置,设置是否开启gzip压缩输出
#gzip    on;


Web服务的监听配置

server {

listen 80;                ##.监听地址及端口
server_name www.lp.com;   ##站点域名,可以有多个,用空格隔开
charset utf-8;            ##网页的默认字符集

location / {                     ##根目录配置
root html;                       ##网站根目录的位置/usr/local/nginx/html
index index.html index. php;     ##默认首页文件名
}

error_page 500 502 503 504 /50x.html;     ##内部错误的反馈页面
location = /50x.html {                    ##错误页面配置
root html ;
 }
 }
 }

nginx 邮件配置 nginx搭建邮件服务器_Nginx_17

nginx 邮件配置 nginx搭建邮件服务器_Nginx_18

nginx 邮件配置 nginx搭建邮件服务器_nginx_19

 3.访问状态统计配置

1.先使用命令/usr/local/nginx/sbin/nginx -V查看已安装的Nginx 是否包含HTTP_STUB_STATUS模块
2.修改nginx.conf配置文件,指定访问位置并添加stub_status配置

cd /usr/local/nginx/conf
cp nginx.conf nginx.conf.bak
vim /usr/local/nginx/conf/nginx.conf

nginx 邮件配置 nginx搭建邮件服务器_Nginx_20

nginx 邮件配置 nginx搭建邮件服务器_nginx_21

 3.访问状态统计

1.先使用命令/usr/local/nginx/sbin/nginx -v查看已安装的Nginx是否包含HTTP_STUB_STATUS模块

nginx 邮件配置 nginx搭建邮件服务器_nginx 邮件配置_22

2.修改nginx.conf配置文件,指定访问位置并添加stub_status配置

cd /usr/local/nginx/conf
cp nginx.conf{,.bak}

vim /usr/local/nginx/conf/nginx.conf
.....
http {
.....
  server {
    listen 80;
    server_name www.xcf.com;
    charset utf-8;
    location / {
      root html;
      index index.html index.html;
    }
    ##添加stub_status 配置##
    location /status {      #访问位置为/status
      stub_status on;       #打开状态统计功能
      access_log off;       #关闭此位置的日志记录
    }
  }
}

nginx 邮件配置 nginx搭建邮件服务器_Nginx_23

nginx 邮件配置 nginx搭建邮件服务器_Nginx_24

nginx 邮件配置 nginx搭建邮件服务器_nginx_25

 二、Nginx访问控制

1.生成用户密码认证文件

yum install -y httpd-tools

htpasswd -c /usr/local/nginx/passwd.db zhangsan

chown nginx /usr/local/nginx/passwd.db
chmod 400 /usr/local/nginx/passwd.db

nginx 邮件配置 nginx搭建邮件服务器_nginx_26

2.修改主配置文件相对应目录,添加认证配置项

相当于白名单与黑名单
访问控制规则如下:
deny IP/IP 段:拒绝某个 IP 或 IP 段的客户端访问
allow IP/IP 段:允许某个 IP 或 IP 段的客户端访问
规则从上往下执行,如匹配则停止,不再往下匹配

vim /usr/local/nginx/conf/nginx.conf
......
    server {
        location / {
        ......
        ##添加控制规则##
        deny 192.168.126.100;
        #拒绝访问的客户端IP
        allow all;
        #允许其它IP客户端访问
        }
    }
    
systemctl restart nginx

nginx 邮件配置 nginx搭建邮件服务器_nginx_27

 三、Nginx虚拟主机

1.基于域名的虚拟主机

1.为虚拟主机提供域名解析

nginx 邮件配置 nginx搭建邮件服务器_nginx 邮件配置_28

2.为虚拟主机准备网页文档

nginx 邮件配置 nginx搭建邮件服务器_linux_29

3.修改Nginx的配置文件

vim /usr/local/nginx/conf/nginx.conf
......
http {
......
    server {
        listen 80;
        server_name www.xcf.com;
        #设置域名www.xcf.com
        charset utf-8;
        access_log logs/www.xcf.com.access.log;
        #设置日志名
        location / {
            root /var/www/html/xcf;
            #设置www.xcf.com的工作目录
            index index.html index.html;
        }
        error_page 500 502 503 504 /50x.html;
        location = 50x.html{
            root html;
        }
    }

##以上模板完成后复制黏贴并进行简单修改即可
    server {
        listen 80;
        server_name www.zxc.com;
        #设置域名www.zxc.com
        charset utf-8;
        access_log logs/www.zxc.access.com.log;
        location / {
        root /var/www/html/zxc;
        index index.html index.html;
        }
        error_page 500 502 503 504 /50x.html;
        location = 50x.html{
            root html;
        }
    }
}
nginx -t
systemctl restart nginx.service

 2.基于IP的虚拟主机

ifconfig ens33:0 192.168.126.65 netmask 255.255.255.0
ifconfig


vim /usr/local/nginx/conf/nginx.conf
......
http {
......
    server {
        listen 192.168.126.15:80;
        #设置监听地址192.168.126.15
        server_name www.xcf.com;
        charset utf-8;
        access_log logs/www.xcf.access.log;
        location / {
            root /var/www/html/xcf;
            index index.html index.php;
        }
        error_page 500 502 503 504 /50x.html;
        location = 50x.html{
            root html;
        }
    }
    
    server {
        listen 192.168.126.65:80;
        #设置监听地址192.168.126.65
        server_name www.zxc.com;
        charset utf-8;
        access_log logs/www.zxc.access.log;
        location / {
            root /var/www/html/zxc;
            index index.html index.html;
        }
        error.page 500 502. 503 504 /50x.html;
        location = 50x.html{
            root html;
        }
    }
}

nginx -t
systemctl restart nginx

浏览器访问
http://192.168.102.136
http://192.168.102.136

3.基于端口的虚拟主机

vim /usr/local/nginx/conf/nginx.conf
......
http {
......
    server {
        listen 192.168.126.15:8080;
        #设置监听8080 端口
        server_name www.xcf.com;
        charset utf-8;
        access_log logs/www.xcf.access.log;
        location / {
            root /var/www/html/xcf;
            index index.html index.html;
        }
        error_page 500 502. 503 504 /50x.html;
        location = 50x.html{
            root html;
        }
    }

    server {
        listen 192.168.126.65:8888;
        #设置监听8888端口
        server_name www.zxc.com;
        charset utf-8;
        access_log logs/www.zxc.access.log;
        location / {
            root /var/www/html/benet;
            index index.html index.php; 
        }
        error_page 500 502 503 504 /50x.html;
        location = 50x.html{
            root html;
        }
    }
}

nginx -t
systemctl restart nginx.service


浏览器访问
http://192.168.102.136:8080
http://192.128.102.136:8888