简介
nginx是一个高性能的http和反向代理服务器,因其稳定性、丰富的功能性、以及低能耗被广泛采用。此处省略2w字。官网地址:http://nginx.org
安装
下载地址:http://nginx.org/en/download.html
本文使用windows平台,所以以下均为windows版本配置。linux环境下几乎一样。
安装解压后的文件目录如下:
注意:此处不要双击nginx.exe运行nginx,在文件夹内的空白处shift+右键打开cmd窗口,输入
start nginx.exe
运行nginx服务,此时如果成功会显示nginx的欢迎页面
常用命令
- start nginx : 启动nginx
- nginx -s reload :修改配置后重新加载生效
- nginx -s reopen :重新打开日志文件
- nginx -t -c /path/to/nginx.conf 测试nginx配置文件是否正确
关闭nginx:
- nginx -s stop :快速停止nginx
- nginx -s quit :完整有序的停止nginx
conf配置
以上都是废话,这里才是重点
先看我们自己配好的conf配置文件
#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 {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
#静态页面
server {
listen 80;
server_name www.xxx.com;
root /usr/local/nginx/html/xxx;
location = /50x.html {
root /usr/share/nginx/html;
}
location / {
}
}
#负载均衡
upstream hestia {
server 127.0.0.1:8080;
#server 127.0.0.2:8080 wight=3;
}
server {
listen 80;
server_name localhost;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
#静态资源
location ~ \.(js|css|gif|jpg|png|bmp|swf)$ {
expires 30d;
root D:\apache-tomcat-9.0.7\webapps\hestia\WEB-INF\classes;
}
location / {
proxy_set_header Host $host:80;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://hestia;
}
}
}
此时可以看出请求已经由nginx进行处理了,静态资源直接访问,动态资源转发到了tomcat
使用以上配置后访问localhost
会被转发到localhost:8080
http模块下包含server模块,server模块下有location模块。
- listen 表示当前的代理服务器监听的端口,默认的是监听80端口。
- server_name 表示监听到之后需要转到哪里去,localhost表示转到本地
- location 表示匹配的路径。/表示匹配所有,此处可以使用正则表达式匹配
- root 表示要寻找的文件和资源的路径
- index 表示默认主页,可以指定多个,按顺序查找。
- deny和allow 是访问控制设置,禁止或允许某个IP或者某个IP段访问。也可以指定unix,允许socket的访问。
动静分离
在一个server中,我们可以设置静态文件直接访问到一个路径,而像jsp这样的动态文件可以交给tomcat处理。expires为过期时间。
#静态资源
location ~ \.(js|css|gif|jpg|png|bmp|swf)$ {
expires 30d;
root D:\apache-tomcat-9.0.7\webapps\hestia\WEB-INF\classes\static;
}
#动态资源
location ~ \.jsp$ {
proxy_set_header Host $host:80;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8080;
}
重点:"proxy_pass http://127.0.0.1:8080" 此处会将匹配到的请求转发给tomcat处理
负载均衡
通过配置upstream,可以很轻松配置后台服务器的负载均衡:
#负载均衡
upstream hestia {
server 127.0.0.1:8080;
#server 127.0.0.2:8080 wight=3;
}
server {
listen 80;
server_name localhost;
location / {
proxy_set_header Host $host:80;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://hestia;
}
}
此处可以在server地址后面加个权重wight,默认为1,权重越大访问到的机会越大。
参考文章:https://segmentfault.com/a/1190000007803704
更多conf配置解读:https://lufficc.com/blog/configure-nginx-as-a-web-server