3、Nginx常用功能

3.1 反向代理服务器

3.1.1、demo2

a.我在tomcat下部署了一个javaweb项目,tomcat安装的服务器IP为:192.168.37.136,部署的项目在tomcat下的访问地址为:http://192.168.37.136:8080/lywh/

 

b.我在IP为192.168.37.133的服务器下面安装成功了Nginx。

c.那怎么样将tomcat下部署的网站使用Nginx代理呢?,修改Nginx的配置文件,修改命令:vim /usr/local/nginx/conf/nginx.conf

 

#配置tomcat的IP地址和访问端口

34 upstream gw {

35
server 192.168.37.136:8080 weight=1;

36 }

 

#Nginx代理配置

 50     location /lywh {

 51         proxy_pass http://gw/lywh;

 52     }

 53     location /sapi {

 54         proxy_pass http://gw/shopappapi;

 55     }

 56     location /cas{

 57         proxy_pass http://gw/cas-server-webapp-4.0.0/login;

 58     }

 59     location /doc{

 60         proxy_pass http://gw/docs;

 61     }

 

 

 

3.1.2、demo2

 

如何将http://localhost的访问代理到http://localhost:8080

我们可以看到nginx文件夹内有一个conf文件夹,其中有好几个文件,其他先不管,我们打开nginx.conf,可以看到一段:

 这段代码在server里面,相当于一个代理服务器,当然可以配置多个。

下面我们仔细来分析一下:

listen:表示当前的代理服务器监听的端口,默认的是监听80端口。注意,如果我们配置了多个server,这个listen要配置不一样,不然就不能确定转到哪里去了。

server_name:表示监听到之后需要转到哪里去,这时我们直接转到本地,这时是直接到nginx文件夹内。

location:表示匹配的路径,这时配置了/表示所有请求都被匹配到这里

root:里面配置了root这时表示当匹配这个请求的路径时,将会在这个文件夹内寻找相应的文件,这里对我们之后的静态文件伺服很有用。

index:当没有指定主页时,默认会选择这个指定的文件,它可以有多个,并按顺序来加载,如果第一个不存在,则找第二个,依此类推。

下面的error_page是代表错误的页面,这里我们暂时不用,先不管它。

 
 

那我们知道了具体的配置了,怎么让它访问localhost时转到tomcat时。实际上就修改两个地方:

Java代码  

  1. server_name localhost:8080;  
  2.   
     
  3. location / {  
  4.     proxy_pass http://localhost:8080;  
  5. }  

 我们就修改了上面两个地方,我的tomcat在8080端口,可以根据自己的需要修改。这里有一个新元素proxy_pass,它表示代理路径,相当于转发,而不像之前说的root必须指定一个文件夹。

此时我们修改了文件,是不是就意思着必须先关了nginx再重新启动了,其实不必,nginx可以重新加载文件的。

我们直接运行:

Html代码  

  1. nginx -s reload  

 

一切没问题了,然后我们再重新打开http://localhost,我们看到tomcat的首页了。

 

3.2 静态资源服务器

http://blog.csdn.net/name_is_wl/article/details/52958472

 

Nginx是一个HTTP服务器,可以将服务器上的静态文件(如HTML、图片)通过HTTP协议展现给客户端

 

  1. server {  
  2.     listen80; # 端口号  
  3.     location / {  
  4.         root /usr/share/nginx/html; # 静态文件路径  
  5.     }  
  6. }  

 

 

3.3 虚拟主机

3.3.1、demo1

有的网站访问量大,需要负载均衡。然而并不是所有网站都如此出色,有的网站,由于访问量太小,需要节省成本,将多个网站部署在同一台服务器上。

例如将www.aaa.com和www.bbb.com两个网站部署在同一台服务器上,两个域名解析到同一个IP地址,但是用户通过两个域名却可以打开两个完全不同的网站,互相不影响,就像访问两个服务器一样,所以叫两个虚拟主机。

 

 

  1. server {  
  2.     listen80default_server;  
  3.     server_name _;  
  4.     return444; # 过滤其他域名的请求,返回444状态码  
  5. }  
  6. server {  
  7.     listen80;  
  8.     server_name www.aaa.com; # www.aaa.com域名  
  9.     location / {  
  10.         proxy_pass http://localhost:8080; # 对应端口号8080  
  11.     }  
  12. }  
  13. server {  
  14.     listen80;  
  15.     server_name www.bbb.com; # www.bbb.com域名  
  16.     location / {  
  17.         proxy_pass http://localhost:8081; # 对应端口号8081  
  18.     }  
  19. }  

在服务器8080和8081分别开了一个应用,客户端通过不同的域名访问,根据server_name可以反向代理到对应的应用服务器。虚拟主机的原理是通过HTTP请求头中的Host是否匹配server_name来实现的,有兴趣的同学可以研究一下HTTP协议。另外,server_name配置还可以过滤有人恶意将某些域名指向你的主机服务器。

3.3.2、demo2

两个虚拟主机(纯静态-html 支持) - Two Virtual Hosts, Serving Static Files

http {

: server {

: listen          80;

: server_name     www.domain1.com;

: access_log      logs/domain1.access.log main;

: location / {

: index index.html;

: root  /var/www/domain1.com/htdocs;

: }

: }

: server {

: listen          80;

: server_name     www.domain2.com;

: access_log      logs/domain2.access.log main;

: location / {

: index index.html;

: root  /var/www/domain2.com/htdocs;

: }

: }

}

 

虚拟主机标准配置(简化) - A Default Catchall Virtual Host

http {

: server {

: listen          80 default;

: server_name     _ *;

: access_log      logs/default.access.log main;

: location / {

: index index.html;

: root  /var/www/default/htdocs;

: }

: }

}

 

在父文件夹中建立子文件夹以指向子域名 - Wildcard Subdomains in a Parent Folder

server {

: # Replace this port with the right one for your requirements

: # 根据你的需求改变此端口

: listen       80;  #could also be 1.2.3.4:80 也可以是1.2.3.4:80的形式

: # Multiple hostnames seperated by spaces.  Replace these as well.

: # 多个主机名可以用空格隔开,当然这个信息也是需要按照你的需求而改变的。

: server_name  star.yourdomain.com *.yourdomain.com www.*.yourdomain.com;

: #Alternately: _ *

: #或者可以使用:_ * (具体内容参见本维基其他页面)

: root /PATH/TO/WEBROOT/$host;

: error_page  404              http://yourdomain.com/errors/404.html;

: access_log  logs/star.yourdomain.com.access.log;

: location / {

: root   /PATH/TO/WEBROOT/$host/;

: index  index.php;

: }

: # serve static files directly

: # 直接支持静态文件 (从配置上看来不是直接支持)

: location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|html)$ {

: access_log        off;

: expires           30d;

: }

: location ~ .php$ {

: # By all means use a different server for the fcgi processes if you need to

: # 如果需要,你可以为不同的FCGI进程设置不同的服务信息

: fastcgi_pass   127.0.0.1:YOURFCGIPORTHERE;

: fastcgi_index  index.php;

: fastcgi_param  SCRIPT_FILENAME  /PATH/TO/WEBROOT/$host/$fastcgi_script_name;

: fastcgi_param  QUERY_STRING     $query_string;

: fastcgi_param  REQUEST_METHOD   $request_method;

: fastcgi_param  CONTENT_TYPE     $content_type;

: fastcgi_param  CONTENT_LENGTH   $content_length;

: fastcgi_intercept_errors on;

: }

: location ~ /\.ht {

: deny  all;

: }

: }

 

3.4、负载均衡

一个简单的负载均衡的示例,把www.domain.com均衡到本机不同的端口,也可以改为均衡到不同的地址上。>

 

http {

: upstream  myproject {

: server 127.0.0.1:8000 weight=3;

: server 127.0.0.1:8001;

: server 127.0.0.1:8002;

: server 127.0.0.1:8003;

: }

 

: server {

: listen 80;

: server_name www.domain.com;

: location / {

: proxy_pass http://myproject;

: }

: }

}

 

nginx的upstream目前支持4种方式的分配

3.4.1、轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

3.4.2、weight

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
例如:
upstream bakend {
server 192.168.0.14 weight=10;
server 192.168.0.15 weight=10;
}

3.4.3、ip_hash

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
例如:
upstream bakend {
ip_hash;
server 192.168.0.14:88;
server 192.168.0.15:80;
}

3.4.4、fair(第三方)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backend {
server server1;
server server2;
fair;
}

3.4.5、url_hash(第三方)

 

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法

upstream backend {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}

 

3.5、FastCGI

Nginx本身不支持PHP等语言,但是它可以通过FastCGI来将请求扔给某些语言或框架处理(例如PHP、Python、Perl)。

 

  1. server {  
  2.     listen80;  
  3.     location ~ \.php$ {  
  4.         include fastcgi_params;  
  5.         fastcgi_param SCRIPT_FILENAME /PHP文件路径$fastcgi_script_name; # PHP文件路径  
  6.         fastcgi_pass127.0.0.1:9000; # PHP-FPM地址和端口号  
  7.         # 另一种方式:fastcgi_pass unix:/var/run/php5-fpm.sock;  
  8.     }  
  9. }  

配置中将.php结尾的请求通过FashCGI交给PHP-FPM处理,PHP-FPM是PHP的一个FastCGI管理器。

 

Nginx常用功能的更多相关文章

  1. 3.Nginx常用功能介绍

    Nginx常用功能介绍 Nginx反向代理应用实例 反向代理(Reverse Proxy)方式是指通过代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并且从内部网络服 ...

  2. Nginx常用功能配置二

    Nginx常用功能配置二 Nginx location匹配设置 location作用:可以根据用户请求的URI来执行不同的应用,根据用户请求的网站的地址URL匹配. location语法: locat ...

  3. Nginx常用功能配置一

    Nginx常用功能配置 参数include配置 说明:如果日常工作中server标签存在太多,可以采用include配置模式,Nginx的主配置文件包含的所有虚拟主机的子配置文件会统一放入extra目 ...

  4. nginx常用功能和配置

    nginx常用功能和配置 1.nginx常用功能和配置 1.1 限流 1.2 压力测试工具--Ab 1.2.1安装 1.2.2 测试 1.2.3 返回值 1.3 limit_conn_zone 1.4 ...

  5. 前端开发掌握nginx常用功能之rewrite

    上一篇博文对nginx最常用功能的server及location的匹配规则进行了讲解,这也是nginx实现控制访问和反向代理的基础.掌握请求的匹配规则算是对nginx有了入门,但是这些往往还是不能满足 ...

  6. Nginx常用功能(5)

    一.反向代理 1.多域名跳转(location) server www.test.com location / { proxy_pass http://192.168.100.100:8080/web ...

  7. nginx常用功能配置

    一.规范优化nginx配置文件 nginx的主配置文件为nginx.conf,主配置文件包含的所有虚拟主机的子配置文件会统一放入extra目录中,虚拟主机的配置文件按照网站的域名或功能取名,例如www ...

  8. 前端开发掌握nginx常用功能之server&location匹配规则

    nginx主要是公司运维同学必须掌握的知识,涉及到反向代理.负载均衡等服务器配置.前端开发尤其是纯前端开发来说对nginx接触的并不多,但是在一些情况下,nginx还是需要前端自己来搞:例如我们公司的 ...

  9. 5.8 Nginx 常用功能的配置

随机推荐

  1. PHP进阶-PHP执行和加速原理

  2. [skill][git] git 常用操作记录

    傻瓜入门: step by step : https://try.github.io/levels/1/challenges/1 一本书: https://git-scm.com/book/en/v2 ...

  3. 遍历出文档内所有元素的tagName

    //深度优先 function deepLogTagNames(parentNode){ console.log(parentNode.tagName); const childNodes=paren ...

  4. 洛谷P3158 放棋子 [CQOI2011] dp+数论

    正解:dp+数论 解题报告: 传送门! 考虑对每种颜色的棋子单独考虑鸭,那显然有,当某一行或某一列已经被占据的时候,那一行/一列就不能再放别的颜色的棋子了,相当于直接把那一行/一列直接消了 显然就能考 ...

  5. tomcat停止和启动脚本

    日常重启tomcat比较麻烦,所以写了2个脚本,在脚本后输入tomcat名称即可 启动或重启tomcat #!/bin/sh TOMCAT_HOME=/usr/java/$1 if [ ! -n &q ...

  6. 分布式文档系统_document查询内部原理

    1.客户端发送请求到任意一个node,成为coordinate node2.coordinate node对document进行路由,将请求转发到对应的node,此时会使用round-robin随机轮 ...

  7. 【SQL】from a,b。表a 和b之间是什么关系?

    1.select a.id from a,b……——>这里a和b用逗号隔开,a,b之间默认是inner join的关系.

  8. Python3学习之路~8.3 socket 服务端与客户端

    通过8.2的实例1-6,我们可以总结出来,socket的服务端和客户端的一般建立步骤: 服务端 步骤:1创建实例,2绑定,3监听,4阻塞,5发送&接收数据,6关闭. #Author:Zheng ...

  9. Python3学习之路~3.2 递归、函数式编程、高阶函数、匿名函数、嵌套函数

    1 递归 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. def calc(n): print(n) if int(n / 2) == 0: return n r ...

  10. Redis入门到高可用(四)—— Redis的五种数据结构的内部编码

    Redis的五种数据结构的内部编码