Nginx是一个高性能、轻量级的Web和反向代理服务器, 其特点是占有内存及资源少、抗并发能力强。Nginx安装简单、配置简洁、启动快速便捷、支持热部署、支持 SSL、拥有高度模块化的设计。
Nginx的主要功能有:
Web服务器
反向代理
负载均衡
备注: 以下命令中的 /usr/local/nginx 是nginx二进制文件的绝对路径,需根据自己实际的安装路径而定。
/usr/local/nginx/sbin/nginx
/usr/local/nginx/sbin/nginx -s reopen
/usr/local/nginx/sbin/nginx -s reload
/usr/local/nginx/sbin/nginx -s stop
ps -ef|grep nginx
kill -QUIT <进程号> 或 kill -TERM <进程号>
pkill -9 nginx
Nginx作为Web服务器, 需要定义server虚拟主机,让这些虚拟主机去处理对于特定域名或IP地址的请求。每个server虚拟主机都定义了 location 指令,location 定义了对于指定的一组 URI 是如何匹配和进行处理的。
server {
listen 80;
server_name www.example.com;
location / {
root /usr/local/www;
index index.html;
}
}
参数说明:
server 代表1个虚拟主机,可以有多个
server_name 匹配请求的指定域名或IP地址
location 配置请求的路由,匹配对应的URI
root 查找资源的路径(文件夹目录)
index 默认查找
server {
location 表达式 {
}
}
URL重写是指: 当请求的URL满足事先定义好的规则时, 将跳转/定向到某个规则,比如常见的伪静态、301重定向、浏览器定向等。
server {
rewrite 规则 定向路径 重写类型;
}
rewrite参数说明:
$index
来表示正则里的捕获分组重写类型:
域名跳转: 访问 www.aaa.com 跳转到 www.bbb.com
server {
listen 80;
server_name www.aaa.com;
location / {
rewrite ^/$ www.bbb.com permanent ;
}
}
try_files是指: 按顺序检查文件是否存在,返回第一个找到的文件。如果所有的文件都找不到,会进行一个内部重定向到最后一个参数.
try_files file1 files2 ... uri
参数说明:
try_files $uri $uri/ /index.php?q=$uri&$args;
当访问:www.example.com/test 时会依次查找,若 1.html,2.html 都不存在,最终返回 3.html
server {
listen 80;
server_name www.example.com;
root html;
index index.html;
location /test {
try_files /1.html /2.html /3.html;
}
}
当访问:www.example.com/test 时会依次查找,若 1.html,2.html 都不存在,则跳转到命名为abc的location
server {
listen 80;
server_name www.example.com;
root html;
index index.html;
location /test {
try_files /1.html /2.html @abc;
}
location @abc{
rewrite ^/(.*)$ http://www.example2.com;
}
}
location / {
# URL 匹配不到任何静态资源,返回同一个 index.html 页面,这个页面就是你 app 依赖的页面。
try_files $uri $uri/ /index.html;
}
server {
# 开启gzip 压缩
gzip on;
# 设置gzip所需的http协议最低版本 (HTTP/1.1, HTTP/1.0)
gzip_http_version 1.1;
# 设置压缩级别(1-9), 值越大压缩率越高,同时消耗cpu资源也越多,建议设置在4左右
gzip_comp_level 4;
# 设置压缩的最小字节数, 页面Content-Length获取
gzip_min_length 1000;
# 设置压缩文件的类型 (text/html), 不建议压缩图片(如jpg、png本身已压缩)
gzip_types text/plain application/javascript text/css;
#配置禁用gzip条件,支持正则。此处表示ie6及以下不启用gzip(因为ie低版本不支持)
gzip_disable "MSIE [1-6]\.";
}
http {
# 配置共享会话缓存大小,视站点访问情况设定
ssl_session_cache shared:SSL:10m;
# 配置会话超时时间
ssl_session_timeout 10m;
server {
listen 443;
server_name www.example.com;
ssl on;
# 设置长连接
keepalive_timeout 70;
# HSTS策略
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload" always;
# 证书文件
ssl_certificate www.example.com.crt;
# 私钥文件
ssl_certificate_key www.example.com.key;
# 优先采取服务器算法
ssl_prefer_server_ciphers on;
# 指定SSL协议
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
# 定义算法
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4";
# 减少点击劫持
add_header X-Frame-Options DENY;
# 禁止服务器自动解析资源类型
add_header X-Content-Type-Options nosniff;
# 防XSS攻擊
add_header X-Xss-Protection 1;
}
}
server {
listen 80;
server_name www.example.com;
root html;
index index.html;
location /test {
# 请求host
proxy_set_header Host $http_host;
# 请求ip
proxy_set_header X-Real-IP $remote_addr;
# 请求协议
proxy_set_header X-Scheme $scheme;
# 代理服务器
proxy_pass http://localhost:3000;
}
}
当访问http://www.example.com/test时, nginx会将请求转发到http://localhost:3000上。
在服务器集群中,Nginx起到一个代理服务器的角色(即反向代理),为了避免单独一个服务器压力过大,将来自用户的请求转发给不同的服务器。
负载均衡用于从 "upstream" 模块定义的后端服务器列表中选取一台服务器接受用户的请求。
一个最基本的upstream模块如下:
#动态服务器组, server是后端服务器,my_server是自定义的服务器组名称。
upstream my_server {
server localhost:8001;
server localhost:8002;
server localhost:8003;
}
在upstream模块配置完成后,要让指定的访问反向代理到服务器组。
server {
listen 80;
server_name www.example.com;
root html;
index index.html;
location / {
# 反向代理到定义好的服务器组my_server
proxy_pass my_server;
}
}
http {
upstream my_server {
server localhost:8001;
server localhost:8002;
server localhost:8003;
}
server {
listen 80;
server_name www.example.com;
root html;
index index.html;
location / {
# 反向代理到定义好的服务器组my_server
proxy_pass my_server;
}
}
}
表示每个请求按时间顺序逐一分配到不同的后端服务器。
upstream my_server {
server localhost:8001;
server localhost:8002;
}
表示在轮询策略的基础上指定轮询的服务器的权重,默认为1,权重越高分配到需要处理的请求越多。
upstream my_server {
server localhost:8001 weight=1;
server localhost:8002 weight=2;
}
表示指定负载均衡器按照基于客户端IP的分配方式,这个方法确保了相同的客户端的请求一直发送到相同的服务器,以保证session会话。这样每个访客都固定访问一个后端服务器,可以解决session不能跨服务器的问题。
upstream my_server {
ip_hash;
server localhost:8001;
server localhost:8002;
}
备注:
表示把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果。
upstream my_server {
least_conn;
server localhost:8001;
server localhost:8002;
}
表示当前的server暂时不参与负载均衡。
upstream my_server {
server localhost:8001 down;
server localhost:8002;
server localhost:8003;
}
表示预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因 此这台机器的压力最轻。
upstream my_server {
server localhost:8001 backup;
server localhost:8002;
server localhost:8003;
}
前提条件:nginx源码或nginx plus源码、一个代理服务器或一个代理服务器组、SSL证书和私钥,你可以从一个可信任证书颁发机构(CA)购买一个服务器证书,或者你可以使用openssl库创建一个内部CA签名
查看nginx模块,如果看到with-ssl那就是有的。注册ssl证书并下载,配置nginx就比如说,还没有配置https前你配置了80,那么你http://域名/直接默认访问80端口,那么一样的
首先让nginx服务器监听两个端口,分别是80端口和443端口,注意监听443端口的时候需要配置证书的认证以及创建自签名证书!关于证书的认证的以及创建自签名的证书,nginx的配置如下,只给出了两个server的配置,可以直接复制到http块中。
常见的服务器有三种:Nginx、IIS、Apache,都可以配置https,但是没必要全部知道,因为Nginx可以起到反向代理的作用,会配置Nginx就足够了。在/etc/nginx/conf.d目录下新建https.conf
开启Gzip:给Nginx上 ngx_http_gzip_module 这个模块,用 nginx -V 命令查看 configure arguments 是否有,没有的话需要编译加载这个模块;给文件做缓存:图片文件,字体文件,js和css都是些可以用来缓存的文件
ginx和php-fpm对于-USR2、-HUP信号的处理方式不一样:TERM, INT(快速退出,当前的请求不执行完成就退出),QUIT (优雅退出,执行完当前的请求后退出)
php-fpm采用master/worker架构设计, master进程负责CGI、PHP公共环境的初始化及事件监听操作。worker进程负责请求的处理功能。在worker进程处理请求时,无需再次初始化PHP运行环境,这也是php-fpm性能优异的原因之一
总有一些不怀好意的人来访问我的网站,而且频率还很高,所以就用简单的方式禁止访问,就用 Nginx 来实现。想要添加黑名单,只要在 blocksip.conf 中添加 IP ,然后 reload 即可。
客户端就可以通过请求代理服务器,获取想要的资源,但客户端并不知道给他资源的是哪个服务器。这种方式就是反向代理。当一台服务器的单位时间内的访问量越大的时候,服务器的压力会越大。我们通常通过负载均衡的方式来分担服务器的压力。
Nginx作为反向代理服务器,就是把http请求转发到另一个或者一些服务器上。通过把本地一个url前缀映射到要跨域访问的web服务器上,就可以实现跨域访问。对于浏览器来说,访问的就是同源服务器上的一个url
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!