正向代理(forward proxy) ,一个位于客户端和原始服务器之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并制定目标(原始服务器),而后代理向原始服务器转发请求并将得到的内容返回给客户端,客户端才能使用正向代理。咱们平时说的代理就是指正向代理。 javascript
简单一点:A向C借钱,因为一些状况不能直接向C借钱,因而A想了一个办法,他让B去向C借钱,这样B就代替A向C借钱,A就获得了C的钱,C并不知道A的存在,B就充当了A的代理人的角色。php
反向代理(Reverse Proxy),以代理服务器来接受internet上的链接请求,而后将请求转发给内部网络上的服务器,并将从服务器上获得的结果返回给internet上请求的客户端,此时代理服务器对外表现为一个反向代理服务器。 css
理解起来有些抽象,能够这么说:A向B借钱,B没有拿本身的钱,而是悄悄地向C借钱,拿到钱以后再交给A,A觉得是B的钱,他并不知道C的存在。html
位置不一样 正向代理,架设在客户机和目标主机之间; 反向代理,架设在服务器端;java
代理对象不一样 正向代理,代理客户端,服务端不知道实际发起请求的客户端; 反向代理,代理服务端,客户端不知道实际提供服务的服务端; linux
IIS(Internet信息服务)英文InternetInformationServer的缩写。它是微软公司主推的服务器。IIS的特色具备:安全性,强大,灵活。nginx
Tomcat是Apache软件基金会(ApacheSoftwareFoundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其余一些公司及我的共同开发而成。Tomcat技术先进、性能稳定,并且免费,于是深受Java爱好者的喜好并获得了部分软件开发商的承认,成为目前比较流行的Web应用服务器(降低趋势)c++
Nginx不只是一个小巧且高效的HTTP服务器,也能够作一个高效的负载均衡反向代理,经过它接受用户的请求并分发到多个Mongrel进程能够极大提升Rails应用的并发能力。web
Apache是世界使用排名第一的Web服务器软件。它几乎能够运行在全部的计算机平台上。因为Apache是开源免费的,所以有不少人参与到新功能的开发设计,不断对其进行完善。Apache的特色是简单、速度快、性能稳定,并可作代理服务器来使用。正则表达式
静态资源:通常客户端发送请求到web服务器,web服务器从内存在取到相应的文件,返回给客户端,客户端解析并渲染显示出来。
动态资源:通常客户端请求的动态资源,先将请求交于web容器,web容器链接数据库,数据库处理数据以后,将内容交给web服务器,web服务器返回给客户端解析渲染处理。
2.静态资源和动态资源的区别
a.静态资源通常都是设计好的html页面,而动态资源依靠设计好的程序来实现按照需求的动态响应;
b.静态资源的交互性差,动态资源能够根据需求自由实现;
c.在服务器的运行状态不一样,静态资源不须要与数据库参于程序处理,动态可能须要多个数据库的参与运算。
画图说明: (课堂讲解)
静态资源服务器运行状态:
动态资源服务器:
一、没有请求后端数据库
二、请求了后端数据库
wget http://nginx.org/download/nginx-1.14.2.tar.gz (stable)
nginx是C语言开发,建议在linux上运行,本教程使用Centos7.4为安装环境。
n gcc
安装nginx须要先将官网下载的源码进行编译,编译依赖gcc环境,若是没有gcc环境,须要安装gcc:yum install gcc-c++
n PCRE
PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,因此须要在linux上安装pcre库。
yum install -y pcre pcre-devel
注:pcre-devel是使用pcre开发的一个二次开发库。nginx也须要此库。
n zlib
zlib库提供了不少种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,因此须要在linux上安装zlib库。
yum install -y zlib zlib-devel
n openssl
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、经常使用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
nginx不只支持http协议,还支持https(即在ssl协议上传输http),因此须要在linux安装openssl库。
yum install -y openssl openssl-devel
yum install -y gcc-gcc++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
解压
tar xf nginx-1.12.2.tar.gz
进行configure配置
./configure --prefix=/usr/local/nginx (能够配置不少nginx其余模块,后面配置https的时候讲解)
编译和安装
make & make install -j 4
若是以上操做没有报错则安装成功
启动nginx
./nginx -c 指定配置文件位置
eg: ./nginx -c /usr/local/conf/nginx.conf
./nginx 默认使用NGINX_HOME/config/nginx.conf配置文件
中止niginx
./nginx -s stop 中止
./nginx -s quit 退出
./nginx -s reload 从新加载nginx.conf (很经常使用)
发送信号量 (找不到nginx安装位置,可是想要中止nginx服务器状况下使用)
kill -TERM master进程号
kill -QUIT master进程号
nginx 经常使用命令
./nginx -v 查看nginx版本
./nginx -V 查看nginx的编译版本及配置的参数
./nginx -t 主要验证nginx.conf配置文件是否有问题
./nginx -c 根据配置文件的位置启动nginx
./nginx -s 发送对应信号处理master进程
-s signal : send signal to a master process: stop, quit, reopen, reload
个人本机nginx配置文件路径是 /usr/local/nginx/conf/ 这个目录下面,其中nginx.conf是主配置文件。Nginx.conf配置文件主要分红四个部分:
main (全局设置) 。
sever (虚拟主机设置)。
upstream负载均街服务器设置。
location(URL匹配特定位置的设置)。
说明:
main部分设置的命令将影响其余全部设置。 server 部分的命令主要用于指定主机和端口;。upstream命令主要用于负载均衡,设置一系列的后端服务器。 location 部分用于匹配网页位置。这四者之间的关系式server继承main, location 继承server, upstream 既不会继承其余设置也不会被继承。
在这四个部分当中,每一个部分都包含若干命令,这些命令主要包含Nginx的主模块命令,事件模块命令,HTTP核心模块命令,同时每一个部分还可使用其余HTTP模块命令(例如HTTP SSL模块,HttpGzip Static模块和Http Addition模块等)。
#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { use epoll; worker_connections 1024; } /* 以上这块配置代码是对nginx全局属性的配置。 user :主模块命令, 指定Nginx的worker进程运行用户以及用户组,默认由nobody帐号运行(默认nginx)。 worker processes: 指定Nginx要开启的进程数。 error log:用来定义全局错设日志文件的路径和日志名称。日志输出级别有debug,info,notice,warn,error,crit 可供选择,其中debug输出日志最为详细,面crit输出日志最少。 pid: 用来指定进程id的存储文件位置。 event:设定nginx的工做模式及链接数上限,其中参数use用来指定nginx的工做模式(这里是epoll,epoll是多路复用IO(I/O Multiplexing)中的一种方式),nginx支持的工做模式有select ,poll,kqueue,epoll,rtsig,/dev/poll。其中select和poll都是标准的工做模式,kqueue和epoll是高效的工做模式,对于linux系统,epoll是首选。 worker_connection是设置nginx每一个进程最大的链接数,默认是1024,因此nginx最大的链接数max_client=worker_processes * worker_connections。进程最大链接数受到系统最大打开文件数的限制,须要设置ulimit。 */ #下面部分是nginx对http服务器相关属性的设置 http { include mime.types; 主模块命令,对配置文件所包含文件的设定,减小主配置文件的复杂度,至关于把部分设置放在别的地方,而后在包含进来,保持主配置文件的简洁 default_type application/octet-stream; 默认文件类型,当文件类型未定义时候就使用这类设置的。 #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 指定nginx日志的格式 # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; 开启高效文件传输模式(zero copy 方式),避免内核缓冲区数据和用户缓冲区数据之间的拷贝。 #tcp_nopush on; #keepalive_timeout 0; 客户端链接超时时间 keepalive_timeout 65; #gzip on; 设置是否开启gzip模块 #server段是虚拟主机的配置 这里能够写在别的文件中 而后在包含进来,好比写在/usr/local/nginx/vhost/xxx.conf 目录某文件中 而后在包含进来,能够包含多个文件 include /usr/local/nginx/vhost/*; server { listen 80; 虚拟主机的服务端口 server_name localhost; 用来指定ip或者域名,多个域名用逗号分开 #charset utf-8; #access_log logs/host.access.log main; location / { 地址匹配设置,支持正则匹配,也支持条件匹配,这里是默认请求地址,用户能够location命令对nginx进行动态和静态网页过滤处理 root html; 虚拟主机的网页根目录 index index.html index.htm; 默认访问首页文件 } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # location ~ \.php$ { 将以php为后缀的文件转发到 FastCGI处理. 使用FastCGI默认配置。本地8088端口处理 fastcgi_pass http://127.0.0.1:8088; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } #静态文件,nginx本身处理 location ~ ^/(images|javascript|js|css|flash|media|static)/ { root /var/www/public/images; expires 30d; #缓存时间30天,静态文件更新很少,过时时间能够设大一点。 } #配置Nginx状态的地址 location /NginxStatus { stub_status on; access_log on; auth_basic "NginxStatus"; auth_basic_user_file conf/htpasswd; } #配置nginx负载均衡的服务器列表 upstream mysvr { #weigth参数表示权值,权值越高被分配到的概率越大 #本机上的Squid开启3128端口 server 192.168.199.1:88 weight=5; server 192.168.199.1:80 weight=1; } # 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; #} # 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 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; # } #} }