Nginx

第一章 Nginx介绍

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

Nginx特点是占有内存小,并发处理能力强。此外,还有Apache Lighttpd,Tengine(阿里巴巴)等服务器。

Nginx处理不了动态资源,只能做静态资源。

Nginx不处理请求,只是转发请求。

1.1 正向代理和反向代理

  1. 正向代理:类似一个跳板机,类似,我想访问外网但访问不了,所以我先访问一个代理服务器,代理服务器访问外网,将外网内容取回,然后发给我。
  2. 反向代理:以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器

1.2 Nginx安装

#centos安装
yum list installed | grep gcc	#检查是否安装gcc编译器
yum install gcc					#安装gcc

yum list installed | grep openssl	#检查是否安装openssl
yum install openssl openssl-devel -y

yum list installed | grep pcre 	
yum install pcre pcre-devel -y

yum list installed | grep zlib
yum install zlib zlib-devel -y

#一次性安装所有依赖
yum install gcc openssl openssl-devel pcre pcre-devel zlib zlib-devel -y

#ubuntu安装,ubuntu不支持yum
apt-get install openssl libssl-dev	#后者取代了openssl-devel
apt-get install libpcre3-dev	#取代了pcre
apt-get install zlib1g-dev		#取代了zlib-devel

#注意:wget不是断点传输

#依赖安装好后,解压nginx,进入nginx根目录
./configure --prefix=/usr/local/nginx	#指定前缀目录

#编译
make

#安装
make install

#进入/usr/local/nginx,有四个文件夹
conf	html	logs	sbin

conf:装的是配置文件,主要是nginx.conf文件
html:包括50x.html和index.html,两个静态页面,报错会跳转到这
logs:日志存放位置
sbin:只有一个nginx文件,是nginx启动文件


#额外命令补充
ps 命令的作用是显示进程信息的;

| 符号,是个管道符号,表示ps 和 grep 命令同时执行;

grep 命令是查找(Global Regular Expression Print),能使用正则表达式搜索文本,然后把匹配的行显示出来;

ps命令有一些参数: 
-e : 显示所有进程 
-f : 全格式 
-h : 不显示标题 
-l : 长格式 
-w : 宽输出 
a :显示终端上的所有进程,包括其他用户的进程。 
r :只显示正在运行的进程。 
u :以用户为主的格式来显示程序状况。 
x :显示所有程序,不以终端机来区分。

启动:

#执行启动文件
./nginx

#查看进程
ps -ef | grep nginx
>>> root       8880   1466  0 19:47 ?        00:00:00 nginx: master process ./nginx
	nobody     8881   8880  0 19:47 ?        00:00:00 nginx: worker process
#master主进程,负责维护所有工作进程
#worker进程负责将请求进行转发


#指定配置文件启动
./nginx -c nginx.conf -t	#-c是指定后面的是配置文件目录,-t是检查配置文件是否有问题

关闭:

#找出进程号
ps -ef | grep nginx
#杀死进程
kill -QUIT 主pid	#杀死master的pid,这种方式,nginx会在处理完所有请求后关闭
kill -TERM 主pid	#这种方式,直接杀死,不管剩下的请求是否处理

重启

./nginx -s reload	#当修改配置后想让其生效,就可以重启

1.3 niginx命令和配置文件

./nginx -v	#查看nginx版本
./nginx -V	#查看nginx的版本,编译器版本,和配置参数
#配置文件
#配置worker进程运行用户 nobody也是一个linux用户,一般用于启动程序,没有密码
user  nobody;  
#配置工作进程数目,根据硬件调整,通常等于CPU数量或者2倍于CPU数量
worker_processes  1;  

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

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


###====================================================


#配置工作模式和连接数
events {
    worker_connections  1024;  #配置每个worker进程连接数上限,nginx支持的总连接数就等于worker_processes * worker_connections,上限为65535
}

###===================================================


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

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

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

    #gzip  on;  #开启gzip压缩输出
	
	###-----------------------------------------------
	

    #配置虚拟主机
    server {
        listen       80;  #配置监听端口
        server_name  localhost;  #配置服务名

        #charset koi8-r;  #配置字符集

        #access_log  logs/host.access.log  main;  #配置本虚拟主机的访问日志

	#默认的匹配斜杠/的请求,当访问路径中有斜杠/,会被该location匹配到并进行处理
        location / {	
	    #root是配置服务器的默认网站根目录位置,默认为nginx安装主目录下的html目录
            root   html;  	#这里的内容就代表location处的/,会去找location下的index
	    #配置首页文件的名称
            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;
    #    }
    #}
}

1.4 Nginx主要应用

  • 静态网站部署
  • 负载均衡
  • 静态代理
  • 虚拟主机

第二章 静态网站部署

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

#修改配置文件并将相关静态资源放入相应的目录
location /ace {		#拦截ace请求
    root   /opt/www;  	#这里的内容就代表location处的/,会去找/opt/www/ace下的login.html
    index  login.html;  
    }	
#部署nginx
./nginx -c nginx_ace.conf
#或者
./nginx -s reload

第三章 负载均衡

3.1 两种方式实现负载均衡

  1. 硬件负载均衡

    比如F5,深信服,Array等

  2. 软件负载均衡

    比如nginx,LVS,HAProxy等

3.2 Nginx负载均衡

  1. 原理图:

    用户——>Nginx——>{Tomcat,Tomcat,Tomcat……} //{……}动态资源

  2. 实现

    #服务器部署
    #在tomcat的webapps目录下放入war包即可,其他的差不多,
    #记得修改不同tomcat的端口号,比如一个是启动端口8080,一个是日志端口8005
    
    #修改nginx的配置文件
    upstream www.myweb.com{
    	server 192.168.213.133:8081;
    	server 192.168.213.133:8082;
    }
    
    location /myweb{
    	proxy_pass http://www.myweb.com
    }
    
    #启动nginx和tomcat服务器
    
  3. 负载均衡策略

    1. 轮询策略(默认):

      要求不同服务器的性能相差不多,避免性能差的机器请求堆积。

    2. 权重策略:

      upstream backserver{
      	server 192.168.213.132 weight=5;
      	server 192.168.213.132 weight=2;
      }
      
    3. 最少连接

      web请求会被抓发到连接数最少的服务器上

      upstream backserver{
      	least conn;
      	server 192.168.213.133:8080;
      	server 192.168.213.133:8081;
      }
      
    4. ip_hash

      ip_hash也叫IP绑定,每个访问客户端会固定访问一个后端服务器,可以解决会话Session丢失的问题
      算法:hash("124.207.55.82")%2 = 0,1	因为有两台机器,所以模2
      upstream backserver{
      	ip_hash;
      	server 192.168.213.133:8080;
      	server 192.168.213.133:8081;
      }
      
  4. 负载均衡的其他配置

    配置1:
    upstream backserver{
    	server 192.168.213.133:9100;
    	#其他所有非backup机器down的时候,才请求backup机器,backup,备份
    	server 192.168.213.133:9200 backup;
    }
    
    配置2:
    upstream backserver{
    	server 192.168.213.133:9100;
    	#down 表示当前的server是down状态,不参与负载均衡
    	server 192.168.213.133:9200 down;
    }
    

第四章 静态代理

把所有静态资源的访问改成访问nginx,而不是访问tomcat,这种方式叫做静态代理。因为nginx更擅长处理静态资源,性能更好,效率更高。

所以实际应用中,会将静态资源比如图片,css,html,js等交给nginx处理,而不是由tomcat处理。

4.1 Nginx静态代理实现方式

  1. 方式一,在nginx.conf 的location中配置静态资源的后缀

    #正则表达式,当需要静态资源时,从root指定的目录拼接请求的目录去找
    location~.*\.(js|css|html|htm|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)${
    	root /opt/static;
    }
    
  2. 方式二,在nginx.conf的location中配置静态资源所在目录实现

    #例如,当访问静态资源时,从linux服务器中配置静态资源所在目录实现
    location ~.*/(css|js|img|images){
    	root /opt/static;
    }
    

第五章 动静分离

通过将Nginx的负载均衡和静态代理结合在一起,可以实现动静分离。

动态资源:如jsp由tomcat或其他web服务器完成

静态资源:如图片,css,js等由nginx服务器完成

#主nginx,负责负载均衡
    upstream www.p2p.com{
	ip_hash;
	server 192.168.213.133:8081;
	server 192.168.213.133:8082;
    }  
    upstream static.p2p.com{	#如果需要静态资源,就过滤到这两个nginx上处理
	server 192.168.213.133:81;
	server 192.168.213.133:82;
    }
server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        #location / {
        #    root   html;
       	#    index  index.html index.htm;
        #}
	location /p2p {
	     proxy_pass http://www.p2p.com;
        }
	location ~ .*/(css|images|img|js){	#过滤静态资源
	     proxy_pass http://static.p2p.com;
	}	
	
	#81端口的nginx,负责处理静态资源
	
	 server {
        listen       81;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

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

	location ~ .*/(css|images|js|img){
	     root /opt/static;
	}
	
	
	#81端口的nginx,负责处理静态资源
	 server {
        listen       82;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

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


第六章 虚拟主机

虚拟主机,就是把一台物理服务器划分为多个虚拟服务器,从而可以配置多个网站。

Nginx提供虚拟主机的功能,Nginx下,一个server标签就是一个虚拟主机。Nginx的虚拟主机就是通过nginx.conf中 server节点指定的,想要设置多个虚拟主机,配置多个server节点即可。

6.1 配置虚拟主机方式

  1. 基于端口的虚拟主机

    基于端口的虚拟主机配置,使用端口来区分

    游览器使用同一个域名+端口 或者同一个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;
    	}
    }
    
  2. 基于域名的虚拟主机

    server{
    	listen 80;
    	server name www.myweb.com;
    	location /myweb{
    		proxy_pass http://www.myweb.com;
    	}
    }
    server{
    	listen 80;
    	server name www.p2p.com;
    	location /p2p{
    		proxy_pass http://www.p2p.com;
    	}
    }
    
    DNS将域名绑定到ip地址,这样就可以通过域名访问到服务器。
    目前,没有DNS,可以修改host文件
    
    192.168.213.133 beijing.myweb.com
    192.168.213.133 tianjing.myweb.com
    192.168.213.133 nanjing.myweb.com
    
    三个域名都是访问到相同的ip地址,经过拦截器会判断这三个域名和哪个server的servername相同,就会交给哪个server来处理。
    

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值