Nginx基础
Posted fuzy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx基础相关的知识,希望对你有一定的参考价值。
nginx
中文文档
1、nginx介绍
nginx是什么?一个反向代理服务器,代理的是服务端,主要用来分发请求。nginx是静态web服务器(存储静态资源),一般用来与tomcat搭配使用。例如:当业务处理量较大时,一台tomcat不足以支撑需求,这时候需要部署多台tomcat实例,nginx就可以把请求分发到各个不同的实例进行处理。
2、nginx安装
安装gcc
查看gcc版本,如果没有则执行
yum-y install gcc
安装pcre、pcre-devel(perl库,包括perl兼容的二次开发库)
yum install-y pcre pcre-devel
zlib安装(zlib库提供了很多种压缩和解压缩方式)
yum install-y zlib zlib-devel
openssl安装
yum install-y openssl openssl-devel
获取nginx
wget http://nginx.org/download/nginx-1.17.9.tar.gzcd usr/local
解压
tar-zxvf nginx-1.17.9.tar.gz-C/usr/local/nginx
安装nginx
./configure
make&&make install
启动nginx
sbin/nginx
关闭nginx
./nginx-s stop
修改配置重新加载
sbin/nginx-s reload
注意:可能由于防火墙导致访问失败,可执行以下命令开放端口
/sbin/iptables-I INPUT-p tcp--dport80-j ACCEPT
3、nginx配置文件
#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;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
Main(全局设置)
#主模块指令,指定Nginx Worker进程运行用户及用户组,默认nobody账号
user nobody;
#指定了Nginx要开启的进程数。
worker_processes 1;
#日志配置
error_log logs/error.log;
error_log logs/error.log notice;
error_log logs/error.log info;
#主模块指令,用来指定进程pid的存储文件位置
pid logs/nginx.pid;
#events事件指令是设定Nginx的工作模式及连接数上限
events {
#定义Nginx每个进程的最大连接数 默认1024
worker_connections 1024;
}
HTTP模块(核心模块)
http {
#指定配置文件
include mime.types;
#定义文件类型
default_type application/octet-stream;
sendfile on;
#tcp_nopush on;
#客户端连接保持活动的超时时间
keepalive_timeout 65;
#可配置多个
server {
#监听端口
listen 80;
server_name localhost;
#指定虚拟主机的访问日志存放路径
access_log logs/host.access.log main;
#通用匹配 找到html文件夹下的index.html或者index.htm文件
location / {
root html;
index index.html index.htm;
}
#错误页面匹配
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
Location URL匹配配置
配置语法
location[=|~*|^~]/uri/{...}
配置规则
location = /uri 精准匹配
location ^~ /uri 前缀匹配
location / 通用匹配
规则的优先级
1 location = /
2 location = /index
3 location ^~ /article/
4 location ^~ /article/files/
5 location ~ \.(gif|png|js|css)$
6 location /
http://192.168.11.154/
http://192.168.11.154/index ->2
http://192.168.11.154/article/files/1.txt ->4
http://192.168.11.154/mic.png ->5
配置实例
eg1:
#符合扩展名的静态文件都交给nginx处理
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
}
eg2:
#将upalod和html下的文件都交给nginx处理
location ~ ^/(upload|html)/ {
}
eg3:
#将所有动态资源jsp为后缀的文件都交给端口号8080去处理
location ~ .*.php$ {
index index.php;
proxy_pass http://localhost:8080;
}
eg4:
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://192.168.11.161:8080;
#proxy_set_header Host $host;
#proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
4、nginx负载均衡配置
http {
#负载均衡upstream
upstream myproject {
#upstream后端失败了指定次数(max_fails)后,在fail_timeout时间内不再去请求它 weight权重配置
server 127.0.0.1:8000 weight=1 max_fails=2 fail_timeout=600s;
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;
}
}
}
5、nginx缓存配置
#格式:expires 30s|m|h|d
location ~ .*.(jpg|jpeg|gif|bmp|png|js|css|ico)$ {
root static;
expires 1d;
}
6、防盗链
location ~* \.(gif|jpg|png|swf|flv)$ {
root html
#“Referer”请求头为指定值时,内嵌变量$invalid_referer被设置为空字符串,否则这个变量会被置成“1”。查找匹配时不区分大小写,其中none表示缺少referer请求头、blocked表示请求头存在,但是它的值被防火墙或者代理服务器删除、server_names表示referer请求头包含指定的虚拟主机名
#语法: valid_referers none | blocked | server_names | string ...;
valid_referers none blocked *.nginxcn.com;
if ($invalid_referer) {
rewrite ^/ www.nginx.cn
return 404;
}
}
需要注意的是伪造一个有效的“Referer”请求头是相当容易的,因此这个模块的预期目的不在于彻底地阻止这些非法请求,而 是为了阻止由正常浏览器发出的大规模此类请求。还有一点需要注意,即使正常浏览器发送的合法请求,也可能没 有“Referer”请求头。
7、跨域访问
跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略( 是指协议,域名,端口都要相同,其中有一个不同都会产生跨域
)造成的,是浏览器对javascript实施的安全限制。
server{
listen 80;
server_name localhost;
location / {
proxy_pass http://192.168.11.154:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
proxy_connect_timeout 60s;
add_header 'Access-Control-Allow-Methods' 'GET,PUT,POST,DELETE,OPTIONS'; //支持的
请求方式
add_header 'Access-Control-Allow-Header' 'Content-Type,*'; //支持的媒体类型
}
location ~ .*\.(gif|jpg|ico|png|css|svg|js)$ {
root static;
}
}
以上是关于Nginx基础的主要内容,如果未能解决你的问题,请参考以下文章
nginx.conf 忽略了 nginx-ingress 配置映射片段