Nginx学习笔记1(续接nginx安装)

2 篇文章 0 订阅

Nginx学习笔记

0.内容目录

  • Nginx简介
  • Nginx环境搭建
  • Nginx配置文件
  • Nginx主要应用
    • 静态网站
    • 负载均衡
    • 静态代理
    • 动静分离
    • 虚拟主机

1.Nginx简介

1、Nginx(engine x)是一个高性能的Web服务器和反向代理服务器,也可以作为邮件代理服务器;

  • 反向代理(Reverse Proxy )方式是指以代理服务器来接爱internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连的客户端,此时代理服务器对外就表现为一个反向代理服务器。
  • 正向代理:类似一个跳板机,代理访问外部资源。比如:我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器,它能访问那个我不能访问的网站,于是我先连上代理服务器,告诉它我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我;

2、Nginx是由俄罗斯人Igor Sysoev采用C语言开发编写的,第一个公开版本0.1.0发布于2004年10月4日;
在这里插入图片描述

​ Nginx的作者Igor. Sysoev简介:
​ Igor Sysoev出生与1970年的阿拉木图(哈萨克斯坦共和国城市),也就是前苏联;
​ 1991年苏联解体,哈萨克斯坦宣布独立,Nginx作者1994年毕业于莫斯科国立鲍曼技术大学;
​ 毕业后继续在莫斯科工作和生活,就职于NGINX,Inc,任CTO,公司网址:https://www.nginx.com/

3、Nginx特点是占有内存少,并发处理能力强,以高性能、低系统资源消耗而闻名,Nginx官方测试为5万并发请求(指的是同时支持5万的请求);
4、与Nginx同类型的Web服务器还有Apache、Lighttpd(音同lighty)、Tengine(阿里巴巴的)等;
5、Nginx的并发处理能力在同类型的Web服务器中表现极好(Apache、Lighttpd),在全世界范围内大量的网站使用了Nginx,国内互联网中也大量使用了Nginx,比如:淘宝、新浪、搜狐、网易、美团等;
6、Nginx是免费开源的,同时Nginx也有收费的商业版本,商业版本提供了性能优化、宕机等紧急问题处理等技术支持和服务;

2.Nginx环境搭建

2.1.Linux下部署

下载
免费开源版的官方网址:http://nginx.org;
Nginx有 Wndows版本和Linux版本,但更推荐在Linux下使用Nginx(毕竟Linux系统内核小并且稳定);
下载Nginx-1.18.0.tar.gz的源代码文件:wget http://nginx.org/download/nginx-1.18.0.tar.gz

安装

  • 安装前准备
    Nginx的安装需要Linux安装相关的几个库,否则配置和编译会出现错误,这几个库分别是:
    1、gcc编译器是否安装?
    检查是否安装:yum list installed | grep gcc
    执行安装:yum install gcc -y

    2、openssl库是否安装?
    检查是否安装:yum list installed | grep openssl
    执行安装:yum install openssl openssl-devel -y

    3、pcre库是否安装?
    检查是否安装:yum list installed | grep pcre
    执行安装:yum install pcre pcre-devel -y

    4、zlib库是否安装?
    检查是否安装:yum list installed | grep zlib
    执行安装:yum install zlib zlib-devel -y

    一次性安装,执行如下命令:yum install gcc openssl openssl-devel pcre pcre-devel zlib zlib-devel -y

  • 正式安装
    1、解压下载下来的nginx文件,执行命令:tar -zxvf nginx-1.18.0.tar.gz
    2、切换至解压后的nginx主目录,执行命令:cd nginx-1.18.0
    3、在nginx主目录nginx-1.18.0下执行命令:
    ./configure --prefix=/usr/local/nginx(其中–prefix是指定nginx安装路径)
    4、执行命令进行编译:make
    5、执行命令进行安装:make install

启动
启动nginx执行命令:
1、普通启动。切换到nginx安装目录的sbin目录下,执行:./nginx
2、通过配置文件启动:

./nginx -c /usr/loc al/nginx/conf/nginx.conf
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf(其中-c是指定配置文件)

3、检查Nginx是否启动:
​ 通过查看进程:ps -ef | grep nginx
​ nginx体系结构由master进程和其worker进程组成;
​ master进程读取配置文件,并维护worker进程,而worker进程则对请求进行实际处理;

关闭
Nginx的关闭有多种方式:
1、优雅关闭Nginx:
- 找出nginx的进程号:ps -ef | grep nginx
- 执行命令:kill -QUIT 主pid(其中pid是主进程号的pid(master process), 其他为子进程pid(worker process))
2、快速关闭Nginx:
- 找出nginx的进程号:ps -ef | grep nginx
- 执行命令:kill -TERM 主pid
3、重启Nginx:./nginx -s reload(sbin目录下执行此命令)

配置检查
当修改Nginx配置文件后,可以使用Nginx命令进行配置文件语法检查,用于检查Nginx配置文件是否正确;
检查Nginx配置文件是否正确的命令:
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf -t

其他
Linux上查看nginx版本:/usr/local/nginx/sbin/nginx -V
参数说明:
-v(小写的v)显示 nginx 的版本;
-V(大写的V)显示 nginx 的版本、编译器版本和配置参数;

2.2.Windows下环境搭建

在官方网站下载最新 windows 版的 nginx:http://nginx.org/en/download.html ,然后将下载下来的nginx压缩包解压到一个目录下,解压后该软件就可以启动使用了;

启动方式1∶双击解压目录下的nginx.exe文件即可运行nginx(不推荐);
启动方式2∶进入dos窗口,切换到nginx主目录下,在dos窗口执行命令:start nginx.exe
关闭方式1∶在资源管理器杀掉Nginx进程(有两个进程)
关闭方式2∶在dos窗口切换到Nginx安装主目录下执行命令: nginx.exe -s stop
重启命令:nginx.exe -s reload

3.Nginx配置文件

学习Nginx首先需要对它的核心配置文件nginx.conf有一定的认识;
Nginx的核心配置文件主要由三个部分构成:

  • 基本配置
  • events配置
  • http配置:
    – 基本配置
    – 多个server配置

nginx 配置中文说明:

###============================基本配置
#user  nobody; ## 配置worker进程运行用户
worker_processes  1; ## 配置工作进程数目, 根据硬件调整, 通常等于 CPU数量 或者 2倍CPU数量

error_log  logs/error.log; ## 配置全局错误日志及类型, [debug | info | notice | warn | error | crit], 默认是error
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid; ## 配置进程pid文件

###============================events配置

## 配置工作模式和连接数(单个线程连接数可以设置为最大值:55535)
events {
#   use epoll;  ## 优化参数
    worker_connections  1024;    ## 配置每个worker进程连接数上限,nginx支持的总连接数等于worker_processer * worker_connections
}

###============================http配置 

## 配置http服务器,利用它的反向代理功能提供负载均衡支持
http {
    include       mime.types;    ## 配置nginx支持哪些多媒体类型, 可以在conf/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日志存放路径, 并使用上面定义的main日志格式
    #access_log  logs/access.log  main;

    sendfile        on;	## 开启高效文件传输模式
    #tcp_nopush     on; ## 防止网络阻塞

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

    gzip  on; ## 开启gzip压缩输出
	
	###----------------------http基本配置结束
	
	## 配置虚拟主机
    server {
        listen       80;  ## 配置监听端口
        server_name  localhost;  ## 配置服务名称

        #charset koi8-r;  ## 配置字符集
        #access_log  logs/host.access.log  main;  ## 配置本虚拟主机的访问日志

		## 默认的匹配斜杠 / 的请求,当访问路径中有斜杠 /, 会被该location匹配到并进行处理
        location / {
            root   html;  ## root是配置服务器的默认网站根目录位置,默认为nginx安装主目录下的html目录
            index  index.html index.htm;  ## 配置首页文件的名称
        }

        # error_page  404              /404.html;  ## 配置404页面
        # redirect server error pages to the static page /50x.html
		
        error_page   500 502 503 504  /50x.html;  ## 配置50x错误页面
		# 精确匹配
        location = /50x.html {
            root   html;
        }

        ## PHP 脚本请求全部转发到Apache处理
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
		
        ## PHP 脚本请求全部转发到FastCGI处理
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        ## 禁止访问 .htaccess 文件
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
	
	## 配置另一个虚拟主机
    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

	## 配置https 服务,安全的网络传输协议,加密传输,默认端口443,主要是运维去配置
    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;

    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;

    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;

    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;

    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}

}

4.Nginx主要应用

4.1.静态网站

Nginx是一个HTTP的web服务器,可以将服务器上的静态文件(如HTML、图片等)通过HTTP协议返回给浏览器客户端;

server {
    listen 80; #端口号
    location / {
        root /opt/static/ace; #静态文件路径
    }
    location /ace {
        root /opt/static; #静态文件路径
    }
}

例子访问根和访问带有项目名:
1)http://192.168.92.128:80/
2)http://192.168.92.128:80/ace/

规则: ip + port 等于root
1)http://192.168.92.128:80/ = root = /opt/static/ace
2)http://192.168.92.128:80/ace = root = /opt/static/ace

4.2.负载均衡

负载均衡概述
在网站创立初期,我们一般都使用单台机器对外提供集中式服务,但是随着业务量的增大,我们一台服务器不够用,此时就会把多台机器组成一个集群对外提供服务;但是,我们网站沾对外提供的访问入口通常只有一个,比如www.web.com ;
那么当用户在浏览器输入www.web.com进行访问的时候,如何将用户的请求分发到集群中不同的机器上呢,这就是负载均衡要做的事情;负载均衡通常是指将请求"均匀"分摊到集群中多个服务器节点上执行,这里的均匀是指在一个比较大的统计范围内是基本均匀的,并不是完全均匀;

负载均衡实现方式

  • 硬件负载均衡
    比如F5、深信服、Array等;
    优点是有厂商专业的技术服务团队提供支持,性能稳定;
    缺点是费用昂贵,对于规模较小的网络应用成本太高;
  • 软件负载均衡
    比如Nginx、LVS、HAProxy 等;
    优点是免费开源,成本低廉;

Nginx负载均衡
Nginx如何实现负载均衡︰(通过在Nginx的nginx.conf文件进行配置即可实现
在这里插入图片描述
配置如下:(配置2步即可)
1、在http模块上加如下示例代码(按照实际调整)

upstream www.myweb.com {
	server 127.0.0.1:9100 weight=3;
    server 127.0.0.1:9200 weight=1;
}

参数说明:
其中weight=1表示权重,用于后端服务器性能不均的情况,访问比率约等于权重之比,权重越大访问机会越多;
upstream是配置nginx与后端服务器负载均衡非常重要的一个模块,并且它还能对后端的服务器的健康状态进行检查,若后端服务器中的一台发生故障,则前端的请求不会转发到该故障的机器;

2、在server模块里添加如下示例代码(按照实际调整)

location /myweb {
    proxy_set_header http://www.myweb.com;
}

其中www.myweb.com字符串要和upstream后面的字符串相等;

Nginx常用负载均衡策略

  • 1、轮询(默认)
    每个请求轮流分配到不同的后端服务器,如果后端服务器down掉,将自动剔除,配置如示。
upstream backserver {
    server 127.0.0.1:8080;
    server 127.0.0.1:9090;
}
  • 2、权重
    每个请求按一定比例分发到不同的后端服务器,weight值越大访问的比例越大,用于后端服务器性能不均的情况。
upstream backserver {
    server 192.168.0.14 weight=5;
    server 192.168.0.15 weight=2;
}
  • 3、ip_hash
    ip_hash也叫IP绑定,每个请求按访问ip的hash值分配,这样每个访问客户端会固定访问一个后端服务器,可以解决会话Session丢失的问题。
upstream backserver {
    ip_hash;
    server 127.0.0.1:8080;
    server 127.0.0.1:9090;
}
  • 4、最少连接
    web请求会被转发到连接数最少的服务器上。
upstream backserver {
    least_conn;
    server 127.0.0.1:8080;
    server 127.0.0.1:9090;
}

负载均衡其他几个配置

## 第一种
upstream backserver {
    server 127.0.0.1:9100;
	server 127.0.0.1:9200 backup;##(其它所有的非backup机器down的时候,才请求backup机器)
}
## 第二种
upstream backserver {
	server 127.0.0.1:9100;
	server 127.0.0.1:9200 down; ##(down表示当前的server是down状态,不参与负载均衡)
}

4.3.静态代理

把所有静态资源的访问改为访问nginx,而不是访问tomcat,因为nginx更擅长于静态资源的处理,性能更好,效率更高;所以在实际应用中,我们将静态资源比如图片、css、html、js等交给nginx处理,而不是由tomcat处理。
在这里插入图片描述
Nginx静态代理如何实现?(通过在Nginx的nginx.conf文件进行配置即可实现)
方式一:通过在nginx.conf配置文件中添加静态资源的location,比如:

## (举例)当访问静态资源,则从Linux服务器/opt/static目录下获取
location ~ .*\.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {
    root /opt/static;
}
参数说明:
	~ 表示正则匹配,也就是说后面的内容可以是正则表达式匹配;
	第一个点 . 表示任意字符;
	* 表示一个或多个字符;
	\. 是转移字符,是后面这个点的转移字符;
	| 表示或者;
	$ 表示结尾;
	整个配置表示以 . 后面括号里面的这些后缀结尾的文件都由nginx处理;

注意:放置静态资源的目录,要注意一下目录权限问题,如果权限不足,给目录赋予权限;
报错:403错误,赋权命令:chmod 755

方式二:通过在nginx.conf配置文件中配置静态资源所在目录实现,比如:

location ~ .*/(js|css|img|images) {
    root /opt/static;
}

我们将静态资源放入/opt/static目录下,然后用户访问时由nginx返回这些静态资源。

4.4.动静分离

Nginx的负载均衡和静态代理结合在一起,我们可以实现动静分离,这是实际应用中常见的一种场景。
动态资源,如jsp由tomcat或其他web服务器完成;静态资源,如图片、css、js等由nginx服务器完成,它们各司其职,专注于做自己擅长的事情。
动静分离充分利用了它们各自的优势,从而达到更高效合理的架构。

动静分离示例
在这里插入图片描述
Nginx在一台Linux上安装一份,可以启动多个Nginx,每个Nginx的配置文件不一样即可。
负载均衡Nginx配置:

upstream www.p2p.com {
	server 127.0.0.1:9100 weight=5;
    server 127.0.0.1:9200 weight=2;
}
upstream static.p2p.com {
	server 127.0.0.1:81 weight=1;
    server 127.0.0.1:82 weight=1;
}
location /p2p {
	proxy_pass http://www.p2p.com;
}
location ~ .*/(cssljs|imglimages) {
    proxy _pass http://static.p2p.com;
}

静态代理Nginx配置:

location ~ .*/(cssljs|imglimages) {
    root /opt/static;
}

4.5.虚拟主机

虚拟主机,就是把一台物理服务器划分成多个“虚拟”的服务器,这样我们的一台物理服务器就可以当做多个服务器来使用,从而可以配置多个网站;
Nginx 提供虚拟主机的功能,就是为了让我们不需要安装多个Nginx,就可以运行多个网站;
Nginx 中一个server标签就是一个虚拟主机;
nginx 的虚拟主机就是通过 nginx.conf 中 server 节点指定的,想要设置多个虚拟主机,配置多个server节点即可。

配置虚拟主机通常有下面两种方式:

  • 基于端口的虚拟主机
    基于端口的虚拟主机配置,使用端口来区分。浏览器使用同一个域名+端口或同一个ip地址+端口访问。
server {
	listen 8080;
	server_name www.myweb.com;
    location /myweb {
		proxy_pass http://www.myweb.com;
	}
}
server {
	listen 9090;
	server_name www.myweb.com;
    location /p2p {
		proxy_pass http://www.p2p.com;
	}
}
  • 基于域名的虚拟主机

    基于域名的虚拟主机是最常见的一种虚拟主机。

server {
	listen      80;
	server_name www.shop.com;
    location /myweb {
		proxy_pass http://www.shop.com;
	}
}
server {
	listen      80;
	server_name www.p2p.com;
    location /myweb {
		proxy_pass http://www.p2p.com;
	}
}

需要修改一下本地的hosts文件,文件位置:C:\Windows\System32\drivers\etchosts在hosts文件配置:192.168.208.128 www.myweb.com
前面是Linux的IP,后面是你自定义的域名

4.5.1. 虚拟主机示例

城市站点网站(举例说明,我们配置示个城市站点)
在这里插入图片描述
步骤:
1、配置3个Tomcat,每个tomcat一个站点,项目部署在tomcat的ROOT目录下;

2、配置3个Nginx虚拟主机

  • 方式一:在nginx.conf文件中添加三个server节点,用于配置三个虚拟主机
# -nginx.conf文件中-------------------------------
server {
	listen      80;
	server_name beijing.myweb.com;
    location / {
		proxy_pass http://beijing.myweb.com;
	}
}
server {
	listen      80;
	server_name nanjing.myweb.com;
    location / {
		proxy_pass http://nanjing.myweb.com;
	}
}
server {
	listen      80;
	server_name tianjin.myweb.com;
    location / {
		proxy_pass http://tianjin.myweb.com;
	}
}
  • 方式二:通过include的方式在nginx.conf文件中引入虚拟主机配置
    include /usr/local/nginx/vhost/vhost.conf;
# -vhost.conf文件内容------------------
server {
    listen      80;
    server_name beijing.myweb.com;
    location / {
        proxy_pass http://beijing.myweb.com;
    }
}
server {
    listen      80;
    server_name nanjing.myweb.com;
    location / {
        proxy_pass http://nanjing.myweb.com;
    }
}
server {
    listen      80;
    server_name tianjin.myweb.com;
    location / {
        proxy_pass http://tianjin.myweb.com;
    }
}

将虚拟目录的配置文件加入到“http{}”部分的末尾,与其他的server并列。
好处:文件是隔开的,配置更加清晰,主文件中没有那么多的server。

3、配置每个虚拟主机请求转发所对应的后端服务器

upstream beijing.myweb.com {
    server 127.0.0.1:9100;
}
upstream nanjing.myweb.com {
    server 127.0.0.1:9200;
}
upstream tianjin.myweb.com {
    server 127.0.0.1:9300;
}

4、修改hosts文件,让Linux的ip指向到一个三个站点的域名

192.168.70.128 beijing.myweb.com
192.168.70.128 nanjing.myweb.com
192.168.70.128 tianjin.myweb.com

以上待续。
上节内容:Nginx安装步骤(CentOS7.x版本)

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值