Nginx常用功能

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.我在IP192.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. }  

 我们就修改了上面两个地方,我的tomcat8080端口,可以根据自己的需要修改。这里有一个新元素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)。

 

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

 

原文地址:https://www.cnblogs.com/domi22/p/9095984.html