nginx简介
Nginx(“engine x”)是一款是由俄罗斯的程序设计师Igor Sysoev所开发高性能的 Web和 反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。和apache一样,都是web服务器软件,因为其性能优异,所以被广大运维喜欢。又因为nginx是一个轻量级的web服务器,相比apache来说资源消耗更低。想在手机看的点击 nginx配置有了这篇就稳了
作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,这点使 Nginx 尤其受到虚拟主机提供商的欢迎。能够支持高达 50,000 个并发连接数的响应
作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP,也可以支持作为 HTTP代理服务器 对外进行服务。Nginx 用 C 编写, 不论是系统资源开销还是 CPU 使用效率都比 Perlbal 要好的多。
Nginx 安装非常的简单,配置文件 非常简洁(还能够支持perl语法),Bugs非常少的服务器: Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在 不间断服务的情况下进行软件版本的升级。
nginx和apache对比:静态文件处理能力:nginx高于apache,资源消耗:nginx优于apache,因为nginx是异步处理模型,只需要几个进程就能够处理大量在线请求,而apache 2.4仍然是进程模型或者线程模型,即仍然采用大量线程来处理大量在线请求。
nginx的root/alias/try_files/index
1、root
root和alias都可以定义在location模块中,都是用来指定请求资源的真实路径,比如:
location /i/ {
root /data/web/;
}
请求 http://localhost/i/index.html
这个地址时,那么在服务器里面对应的真正的资源是 /data/web/i/index.html
文件
2、alias
alias 正如其名,alias指定的路径是location的别名,不管location的值怎么写,资源的 真实路径都是 alias 指定的路径 ,比如:
location /i/ {
alias /data/web/;
}
同样请求 http://localhost/i/top.gif
时,在服务器查找的资源路径是:/data/web/top.gif
3、try_files
location /i/ {
alias /data/web/;
try_files $uri $uri/ /i/index.html;
}
当用户请求 http://localhost/i时,这里的 $uri 就是 /i。try_files 会到硬盘里尝试找这个文件。如果存在名为 /$root/i(其中 $root 是项目代码安装目录)的文件,就直接把这个文件的内容发送给用户。显然,目录中没有叫 i的文件。然后就看 $uri/,增加了一个 /,也就是看有没有名为 /$root/i/ 的目录。又找不到,就会 fall back 到 try_files 的最后一个选项 /i/index.html,发起一个内部 “子请求”,也就是相当于 nginx 发起一个 HTTP 请求到http://localhost/i/index.html。
例如:
http://192.168.244.129/test/project1/ 将访问pj1目录下index.html页面
http://192.168.244.129/test/project1/a 将访问a目录下的index.html
http://192.168.244.129/test/project1/b,http://192.168.244.129/test/project1/b 访问目录下/test/project1/index2.html;
我们可以看到没有指定页面时默认访问是index.html,当匹配不到时根据try_files规则将转到index2.html
示例二:
server {
root /www/nginx;
index index.html index.jsp;
charset utf-8;
access_log /var/log/nginx/host.access.log main;
error_log /var/log/nginx/host.error.log error;
location ^~ /test/ {
index index.html;
try_files /2.html /1.html /test/test2.html @bd;
}
location @bd {
rewrite ^/(.*)$ http://www.google.com;
}
}
/ 表示 root 所在的目录,1.html 文件前需添加 /,否则请求的格式为 /www/nginx1.html。以 /test/ 开头的 URL 将会匹配 location ^~ /test/ { ... },然后 try_files 指令会分别查找/www/nginx/2.html、/www/nginx/1.html、/test/test2.html 以及 @bd。若前三个 HTML 文件均不存在,则会匹配(内部重定向) location @bd { ... }。
4、index
默认文件,也就是当找不到文件的时候的一个默认的文件,可以配置多个。具体的用法稍后说,请先记住这个东西当你找不到其他合适的东西,默认给你分配的。
# 项目1
location /test/project1{
alias /home/soft/web/pj1/;
try_files $uri $uri/ /test/project1/index2.html;
index index.html;
}
如上默认页面我们指定为index.html,也可指定为其它页面。
nginx代理配置
nginx做代理转发这个是nginx常用的功能之一,用来代理后端接口服务。
在http节点下,使用upstream配置服务地址,使用server的location配置代理映射。
upstream my_server {
server 10.0.0.2:8080;
keepalive 2000;
}
server {
listen 80;
server_name 10.0.0.1;
client_max_body_size 1024M;
location /my/ {
proxy_pass http://my_server/;
proxy_set_header Host $host:$server_port;
}
}
通过该配置,访问nginx地址http://10.0.0.1:80/my的请求会被转发到my_server服务地址http://10.0.0.2:8080/。proxy_pass 访问路径带斜杠时,绝对路径,将用pass转发,需要注意的是,如果按照如下配置:
upstream my_server {
server 10.0.0.2:8080;
keepalive 2000;
}
server {
listen 80;
server_name 10.0.0.1;
client_max_body_size 1024M;
location /my/ {
proxy_pass http://my_server;
proxy_set_header Host $host:$server_port;
}
}
那么,访问nginx地址http://10.0.0.1:80/my的请求会被转发到my_server服务地址http://10.0.0.2:8080/my。proxy_pass 访问路径不带斜杠时,相对路径,将用原路径转发。
nginx跨越访问配置
在做页面开发时,有时会在前端页面发送一些ajax请求,如果ajax请求允许其他站点的请求,则服务器端需要设置允许跨域请求,在nginx服务器下,怎么配置允许跨域?看下面介绍。
http {
add_header Access-Control-Allow-Origin "*";
add_header Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept";
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS";
server {
listen 80;
server_name localhost;
...
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
nginx的https配置
HTTP协议传输的数据都是未加密的,因此使用HTTP协议传输隐私信息非常不安全。为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。因此将原来的http换成了https链接。自签名由openssl生产,正式的可由阿里云生成。
server {
listen 8091 ssl;
server_name test.weixin.com;
#ssl_certificate cert.pem;
#ssl_certificate_key cert.key;
ssl_certificate cert.crt;
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;
}
}
nginx证书pem和crt证书都支持,加入证书后访问https://localhost:8091
如果觉得文章能帮到您,欢迎关注微信公众号:“蓝天Java大数据” ,共同进步!