nginx安装、配置、实战示例
1、nginx安装
Nginx (tengine x) 是一个高性能的HTTP和反向代理web服务器。Nginx是一款轻量级的Web
服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强。
1.1 应用场景
- web服务器
- 反向代理
- 负载均衡
- 动静分离:将静态资源缓存到nginx服务器,请求到达nginx,动态资源代理到tomcat,静态资源直接从nginx获取。
什么是代理?
客户机发送请求时,不会直接到达目标主机,先发给代理服务器,由代理服务器发送给目标服务器。
1.2 安装
步骤一:安装GCC编译器等工具
一、安装编译工具及库文件
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel
二、首先要安装 PCRE
PCRE 作用是让 Nginx 支持 Rewrite 功能。
1、下载 PCRE 安装包,下载地址: http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz
[root@bogon src]# wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz
2、到指定文件夹解压安装包:
[root@bogon src]# tar zxvf pcre-8.35.tar.gz
3、进入安装包目录
[root@bogon src]# cd pcre-8.35
4、编译安装
[root@bogon pcre-8.35]# ./configure
[root@bogon pcre-8.35]# make && make install
5、查看pcre版本
[root@bogon pcre-8.35]# pcre-config --version
步骤二:yum安装Nginx
第一步,在/etc/yum.repos.d/目录下创建一个源配置文件nginx.repo
cd /etc/yum.repos.d/
vim nginx.repo
填写如下内容:
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
保存,则会产生一个/etc/yum.repos.d/nginx.repo文件。
下面直接执行如下指令即可自动安装好Nginx:
yum install nginx -y
安装完成,下面直接就可以启动Nginx了:
systemctl start nginx
现在Nginx已经启动了,直接访问服 务器就能看到Nginx欢迎页面了的。
2、配置
nginx.conf文件结构
... #全局块
events { #events块
...}
http #http块{
... #http全局块
server #server块
{
... #server全局块
location [PATTERN] #location块
{
...
}
location [PATTERN]
{
...
}
}
server
{
...
}
... #http全局块}
1、全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。
2、events块:配置影响nginx服务器或与用户的网络连接。有每个进程的最大连接数,选取哪种事件驱动模型处理连接请求,是否允许同时接受多个网路连接,开启多个网络连接序列化等。
3、http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置。如文件引入,mime-type定义,日志自定义,是否使用sendfile传输文件,连接超时时间,单连接请求数等。
4、server块:配置虚拟主机的相关参数,一个http中可以有多个server。
5、location块:配置请求的路由,以及各种页面的处理情况。
#这里是直接转发给后端应用服务器了,也可以是一个静态首页
第一个必选规则
location = / {
proxy_pass http://tomcat:8080/index
}
第二个必选规则是处理静态文件请求,这是nginx作为http服务器的强项
有两种配置模式,目录匹配或后缀匹配,任选其一或搭配使用
location ^~ /static/ { //以xx开头
root /webroot/static/;
}
#或者
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ { //以xx结尾
root /webroot/res/;
}
3、实战示例
3.1 nginx实现web服务
步骤一:修改nginx的配置文件,内容如下,加在http的块中
server {
listen 80;
server_name 192.168.75.11;
location / {
root /home/web/html;
index index.html;
}
}
步骤二:修改好配置文件之后,可以使用nginx -t 校验文件是否语法合法
修改重要配置文件记得备份(cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak)
步骤三:创建 /home/web/html目录,并上传index.html文件
步骤四:重新加载nginx的配置文件nginx -s reload,或者重启nginx服务
测试效果
浏览器输入nginxIP地址(默认80端口的话不用写端口号)
nginx常用命令
- nginx -t :测试配置文件是否有语法错误
- nginx -s reopen:重启Nginx
- nginx -s reload:重新加载Nginx配置文件,然后以优雅的方式重启Nginx
- nginx -s stop:强制停止Nginx服务
- nginx -s quit:优雅地停止Nginx服务(即处理完所有请求后再停止服务)
3.2 nginx实现反向代理
实现访问虚拟机反向代理到百度首页
http块里加一个server块
server {
listen 80;
server_name 192.168.75.11; #如果是集群环境,此处换成虚ip
location / {
proxy_pass https://www.baidu.com; #proxy_pass 通过代理指向百度页面
}
}
在实际开发过程中,使用nginx的分类配置,实现多个配置文件同时生效
nginx.conf配置文件可以加载一些子配置(目录为include /etc/nginx/conf.d/*.conf;)
3.3 nginx实现负载均衡
打包三个项目jar包传到Linux虚拟机(三个端口号不同7000 8000 9000)
**配置nginx配置文件**
#定义Nginx运行的用户和用户组 如果对应服务器暴露在外面的话建议使用权限较小的用户
user root;
#Nginx进程数, 建议设置为等于CPU总核心数
worker_processes 1; #开启全局错误日志类型
error_log /var/log/nginx/error.log warn;
#进程文件
pid /var/run/nginx.pid;
events {
worker_connections 1024; #单个进程最大连接数
}
http {
#扩展名与文件类型映射表
include /etc/nginx/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 /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
#负载均衡组
upstream myServer{
server 192.168.75.11:7000;
server 192.168.75.11:8000;
server 192.168.75.11:9000;
}
server {
listen 80;
server_name 192.168.75.11; #如果是集群环境,此处换成虚ip
location / {
proxy_pass http://myServer;
}
}
include /etc/nginx/conf.d/*.conf;
}
nginx常见的负载均衡策略
1、轮询
轮询是upstream的默认分配方式,即每个请求按照时间顺序轮流分配到不同的后端服务器,如果某个后端服务器down掉后,能自动剔除。
upstream myServer{
server 192.168.75.11:7000;
server 192.168.75.11:8000;
server 192.168.75.11:9000;
}
2、weight
轮询的加强版,即可以指定轮询比率,weight和访问几率成正比,主要应用于后端服务器异质的场景下。
upstream myServer{
server 192.168.75.11:7000 weight=1;
server 192.168.75.11:8000 weight=2;
server 192.168.75.11:9000 weight=3;
}
3、ip_hash
每个请求按照访问ip(即Nginx的前置服务器或者客户端IP)的hash结果分配,这样每个访客会固定访问一个后端服务器,可以解决session一致问题。
upstream myServer {
ip_hash;
server 192.168.75.11:7000;
server 192.168.75.11:8000;
server 192.168.75.11:9000;
}