Nginx从安装到使用
简介
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。Nginx是由lgor Sysoev为俄罗斯访问量第二的站点(rambler.ru)开发,它已经在该站点上运行超过四年多了。lgor将源代码以类BSD许可证的形式发布。自Nginx发布以来,Nginx已经因为它的稳定性、丰富的功能集、示例配置文件和地系统资源的消耗而闻名了。目前国内大门户网站已经部署了Nginx,如新浪、网易、腾讯。
下载
访问Nginx官网
点击需要下载的版本即可进入下载页,进行下载。
安装必要环境
由于Nginx是C语音编写的,所以我们需要先安装一下相关的依赖包。
yum install gcc-c++
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
安装
-
先上传压缩包到服务器,放到一个合适的文件夹内,这里我放到了/opt/software中
-
使用tar -zxvf 命令解压
-
创建一个nginx文件夹,用于安装
-
进入解压好的文件夹,输入./configure命令,配置安装信息
- ./configure可以指定 --prefix=/path,表示nginx要安装到某个位置
- 这里我们一般指向上一个文件夹./configure --prefix=/opt/software/nginx
- 通过这个属性还可以安装一些其他的模块(略)
-
执行make && make install 编译和安装,&&是短路与的意思,也就是说编译失败就不会安装
-
此时我们回到nginx文件夹,可以看到conf、html、logs、sbin四个文件夹
开放端口
由于nginx是用的80端口,我们需要先放行其端口号,放行方法如下:
firewall-cmd --zone=public --add-port=80/tcp --permanent # 开放80端口
firewall-cmd --zone=public --remove-port=80/tcp --permanent #关闭80端口
firewall-cmd --reload # 配置立即生效
查看所有已经开放的端口
firewall-cmd --zone=public --list-ports #查看开放的端口列表
如果觉得开放端口麻烦,可以直接关闭防火墙
systemctl stop firewalld.service #关闭防火墙
systemctl status firewalld.service #查看防火墙状态
systemctl start firewalld.service #开启防火墙
查看监听的端口
netstat -lnpt #查看端口监听
#PS:centos7默认没有 netstat 命令,需要安装 net-tools 工具,yum install -y net-tools
检查端口被哪个进程占用
netstat -lnpt |grep 端口号
查看程序是否运行
ps -ef | grep 应用名称
查看进程的详细信息
ps 进程id
终止进程
kill -9 线程id
常用命令
使用nginx的命令,需要先进入sbin目录
#根据某个配置文件启动Nginx
nginx -c /opt/software/nginx/conf/nginx.conf
#直接启动nginx,使用默认的配置文件
./nginx
#关闭nginx
./nginx -s quit
#重启nginx 配置文件修改后必须重载
./nginx -s reload
#查看版本信息
./nginx -v
#查看nginx的配置文件目录
./nginx -t
#查看nginx帮助信息
./nginx -h
配置文件
nginx的配置文件默认在nginx的conf文件夹下,名称为nginx.conf。
主模块
#是否以守护线程方式运行,也就是是否在后台脱离终端运行。关闭守护线程可以方便调试
#在配置文件的首行加入 默认为开启状态
daemno on | off;
#是否以多线程方式运行 默认为开启
master_process on | off;
上述的配置建议不要动,使用默认即可
#默认的进程数量 默认为1 一般和CPU的核心数保持一致 服务器/虚拟机一般也都是单核 所以无需修改
worker_processes 1;
#引入文件
include /path/fileName;
#错误日志 需要指定文件和关注的错误级别
error_log /path/file [debug|info|notice|warn|error|crit]
events模块
events模块包含了nginx了有关连接处理的配置
#默认为1024
#在nginx作为http服务器的时候,最大连接数为worker_processes * worker_connctions
#在nginx作为反向代理服务器的时候,最大连接数为worker_processes * worker_connections / 2
worker_connections 1024;
#nginx的负载均衡策略
use epoll;
http模块
#引入文件
include /path/fileName;
#location:处理请求路径
#别名 如现在访问了http://localhost:8080/file/1.jpg
#加入别名后会直接访问http://localhost:8080/file/img/1.jpg
#alias必须以/结束!
location /file{
alias /file/img/;
}
#别名支持正则表达式
^: 匹配字符串开始的位置
$: 匹配字符串结束的位置
.*: .匹配任意字符,*匹配数量0到无穷大
.: 斜杠用来转移,此时代表匹配.
(值1|值2|值3|值4):或匹配,例:(jpg|gif|png|bmp),匹配jpg、或gif、或png、或bmp
i: 不区分大小写
* ~ 为区分大小写匹配
* ~* 为不区分大小写匹配
* !~和!~* 分别为区分大小写不匹配及不区分大小写不匹配
#禁止访问、授权访问
location /{
deny ipaddress; #禁止此机器访问
allow ipaddress/24; #开启一个ip段的访问
allow ipaddress/16;
denyall;
}
server模块
一个server代表一个虚拟机
#当前虚拟机的监听端口
listen port;
#当前虚拟机的 监听的端口
listen ipaddress:port;
#当前虚拟机的监听域名 可以加多个
server_name 域名 域名 域名;
#超时时间
resolver_timeout 5s;
#location:处理请求路径
#将/image拦截,转到/opt/nginx_images
#例如http://www.giao.com/image/1.jpg,会访问http://www.giao.com//opt/nginx_image/1.jpg
#它和alias的区别就是 root后可以不使用/结束
location /image {
root /opt/nginx_images
}
负载均衡
#负载均衡池
upstream backend{
#weight为权重 默认1 这里是5也就是说接收五次请求后,再换机器 默认为轮询
#faild_timeout=30s; 多少秒没有响应认为超时
#max_fails=3 多少秒没有响应任务服务器挂掉了
server 192.168.166.128:8088 weight=5;
server 192.168.166.129:8080;
}
server{
location / {
#使用负载均衡
proxy_pass http://backend;
}
}
反向代理
反向代理要修改nginx的配置文件,修改配置之前我们先养成备份的习惯,先使用cp命令备份一个nginx.conf。
案例1:实现访问本机ip,代理到tomcat服务器。
- 修改server中的server_name为本机的ip地址(因为外部用户访问服务器的时候是通过这个ip访问的)
- 修改location / {}
- 加入proxy_pass http://127.0.0.1:8080;
案例2:访问http://192.168.166.129:9001/edu/直接跳转到127.0.0.1:8080
访问http://192.168.166.129:9001/vod直接跳转到127.0.0.1:8081
nginx的反向代理可能会导致session失效,例如 http://www.baidu.com:8888/giao 被www.baidu.com代理,此时就会造成session失效
解决办法: 在反向代理配置下加入
proxy_cookie_path /giao /;