Nginx是一个高性能的http和反向代理服务器,同时也是一个imap/pop3/smtp代理服务器。十分轻量级的http服务。
常用的web服务器
UNIX和LINUX平台下
Apache nginx lighttpd Tomcat(JAVA语言编写的) IBMwebsphere
Windows平台下
Intenet information server (IIS)
部署nginx服务器
一、 nginx 安装与配置
源码包包安装 所以必须安装开发库软件包组合开发工具软件包组。
[root@localhost ~]# yum groupinstall "开发工具" " 开发库" -y
需要从网上下载软件包。RPM 源码包。
Nginx可以在服务运行的时候升级。平滑升级。
[root@localhost ~]# useradd -M -s /sbin/nologin nginx
[root@localhost ~]# tail -1 /etc/passwd
[root@localhost nginx-package]# tar zxvf nginx-0.8.55.tar.gz
[root@localhost nginx-0.8.55]# ./configure --help
[root@localhost ~]# rpm -qa | grep ssl
[root@localhost nginx-0.8.55]# ./configure
指定安装路径--prefix=/usr/local/nginx
指定用户--user=nginx
指定组--group=nginx
支持状态查看--with-http_stub_status_module
支持https--with-http_ssl_module
Nginx rewrite 地址重写 支持修改用户访问的目标地址
用perl+正则表达式的方式匹配目标地址
[root@localhost ~]# yum install pcre-devel –y
[root@localhost ~]# rpm -qa | grep -i PCRE
pcre-devel-6.6-6.el5_6.1
pcre-6.6-6.el5_6.1
pcre-6.6-6.el5_6.1
pcre-devel-6.6-6.el5_6.1
[root@localhost nginx-0.8.55]# make
[root@localhost nginx-0.8.55]#make install
[root@localhost nginx]# ls
Conf 存放配置文件 主配置文件nginx.conf
html 网页目录
logs 日志文件
sbin 可执行命令 启动脚本
启动nginx服务 默认监听80端口,要把其他网站服务停掉
[root@localhost conf]# netstat -antup | grep :80
tcp 0 0 :::80 :::* LISTEN 4087/httpd [root@localhost conf]# /etc/init.d/httpd stop
[root@localhost sbin]# ./nginx –h
-?,-h : this help 查看帮助信息
-v : show version and exit 查看版本号
-V : show version and configure options then exit 查看编译的配置信息
-t : test configuration and exit 测试配置文件nginx.conf有无错误
-q : suppress non-error messages during configuration testing
-s signal : send signal to a master process: stop, quit, reopen, reload
-p prefix : set prefix path (default: /usr/local/nginx/)
-c filename : set configuration file (default: conf/nginx.conf)使用指定的配置文件
-g directives : set global directives out of configuration file
[root@localhost sbin]# ./nginx
[root@localhost sbin]# netstat -antup | grep :80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 13312/nginx [root@localhost sbin]# ps aux | grep nginx
传输协议TCP,端口号80,所有者nginx
[root@localhost sbin]# elinks --dump http://localhost
Welcome to nginx!
停止nginx服务
没有提供停止服务的脚本,如果要停止服务杀进程。
Pkill -信号 进程名
Kill -信号 pid号
信号:
TREM或INT 快速关闭
QUIT 从容关闭,关闭主进程顺便关闭工作子进程
HUP 重载配置用新的配置开始新的工作进程从容关闭旧的工作进程
USR1 重新打开日志文件
USR2 平滑升级可执行程序
WINCH 从容关闭工作进程 不会立即关闭子进程
[root@localhost sbin]# pkill -HUP nginx
平滑升级nginx软件
[root@localhost nginx-1.0.5]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module
[root@localhost sbin]# mv nginx nginx-old
[root@localhost objs]# mv nginx /usr/local/nginx/sbin/nginx
[root@localhost nginx-1.0.5]# make upgrade 平滑升级
/usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
sleep 1
test -f /usr/local/nginx/logs/nginx.pid.oldbin
kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`
二、 nginx虚拟主机
基于IP地址虚拟主机(通过IP地址区分用户访问)
基于端口虚拟主机(通过端口区分用户访问)
基于域名虚拟主机(通过主机名区分用户访问)
Vim 安装目录/conf/nginx.conf
http {
server{
location/{
}
}
Server{
}
}
[root@localhost conf]# grep -vE "^$|#" nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html; 网页根目录
index index.html index.htm; 首页文件名
}
error_page 500 502 503 504 /50x.html; 错误显示页面
location = /50x.html {
root html;
}
}
}
[root@localhost conf]# grep -vE "^$|#" nginx.conf > nginx-1.conf
[root@localhost conf]# vim nginx-1.conf
[root@localhost nginx]# pkill -9 nginx
[root@localhost nginx]# sbin/nginx -c conf/nginx-1.conf
[root@localhost nginx]# netstat -antup | grep :80
基于端口的虚拟主机
[root@localhost ~]# mkdir /web8000
[root@localhost ~]# mkdir /web8090
[root@localhost ~]# echo web8000 > /web8000/index.html
[root@localhost ~]# echo web8090 > /web8090/index.html
[root@localhost nginx]# vim conf/nginx1.conf
server {
listen 8000;
location / {
root /web8000;
index index.html;
}
}
server {
listen 8090;
location / {
root /web8090;
index index.html;
}
}
[root@localhost nginx]# sbin/nginx -c conf/nginx1.conf
[root@localhost ~]# elinks --dump http://localhost:8000
web8000
[root@localhost ~]# elinks --dump http://localhost:8090
web8090
基于IP地址的虚拟主机(通过IP地址区分用户访问)
生产环境中,要有对应IP地址的物理网卡。
[root@localhost ~]# ifconfig eth0:0 192.168.1.100
[root@localhost ~]# ifconfig eth0:1 192.168.1.200
[root@localhost ~]# echo web100 > /web8000/index.html
[root@localhost ~]# echo web200 > /web8090/index.html
[root@localhost nginx]# vim conf/nginx1.conf
server {
listen 192.168.1.100:80;
location / {
root /web8000;
index index.html;
}
}
server {
listen 192.168.1.200:80;
location / {
root /web8090;
index index.html;
}
}
[root@localhost nginx]# pkill -9 nginx
[root@localhost nginx]# netstat -antup | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 17323/nginx
[root@localhost ~]# elinks --dump http://192.168.1.100
web100
[root@localhost ~]# elinks --dump http://192.168.1.200
web200
基于域名的虚拟主机(通过主机名区分用户的访问)
[root@localhost nginx]# vim conf/nginx1.conf
server {
listen 80;
server_name www.example.com
location / {
root /web8000;
index index.html;
}
}
server {
listen 80;
server_name bbs.example.com
location / {
root /web8090;
index index.html;
}
}
[root@localhost ~]# elinks --dump http://bbs.example.com
web200
[root@localhost ~]# elinks --dump http://www.example.com
web100
[root@localhost nginx]# pkill -9 nginx
[root@localhost nginx]# sbin/nginx -c conf/nginx1.conf
用户访问控制
//只允许192.168.1.1的访问(小范围的写在上面)
Location /{
Allow192.168.1.1
Allow192.168.1.0/24
Denyall
}
拒绝访问(小范围的写在上面)
Location /{
deny192.168.1.1
deny192.168.1.0/24
allowall
}
用户认证(用户在访问页面的时候呀输入正确的用户名密码才能访问)
Location / {
Auth_basic“auth-domain”;
Auth_basic_user_file/usr/local/nginx/conf/authuser.txt
}
生成用户名密码
[root@www ~]# htpasswd -c /usr/local/nginx/conf/authuser.txt admin
-c Create a new file. 指定用户名密码存放的文件
Nginx反向代理(应用层的负载均衡集群)
[root@www nginx]# vim conf/nginx.conf
http {
upstream ly {
server 192.168.1.254:80;
server 192.168.1.2:80;
}
server {
location / {
proxy_pass http://ly;
}
}
}
Nginx的反向代理优点:
可以自动的对后端的网站服务器进行健康检查。若后端某一台服务器不能提供网站服务时,不会将请求发给这台服务器。
分发时候使用的算法:使用最多为轮询和权重值。
轮询算法:(默认,权重值时1)
将请求平均的分发给服务器组服务器。
Weight 指定轮询几率。权重和访问比率成正比。通常用于后端服务器性能不同的情况,默认值为1.
upstream ly {
server 192.168.1.254:80 weight=3;
server 192.168.1.2:80 weight=2;
}
Ip_hash每个请求按访问ip的hash结果分配。这样可以让每个访客固定访问一个后端服务器。可以解决session的问题。
upstream ly {
ip_hash;
server 192.168.1.254:80;
server 192.168.1.2:80;
}
Fair 按后端服务器的响应时间来分配请求响应时间短的优先分配。
不是默认支持。
upstream ly {
fair;
server 192.168.1.254:80;
server 192.168.1.2:80;
}
服务器主机状态类型
Down 表示当前server暂时不参与负载。
Backup: 当其他所有的非backup机器down或者忙的时候,请求会发给backup机器。这台机器压力最轻。
Max_fails: 允许请求失败的次数。默认为1.当超过此次数时,返回proxy_next_upstream模块定义的错误。
Fail_timeout:max_fails次失败后,暂停提供服务的时间。
Nginx的优点。地址重写。防盗链。Nginx做反向代理时能否缓存访问用户的请求。