这里会对nginx常见用法做一下基本介绍,其他请参考nginx文档。
概述
ngnix是一个服务器,可以用来做
- http服务器
- http反向代理服务器
- mail代理服务器
- tcp/udp代理服务器
基本用法
这里假定已经下载完。
nginx有主进程和一些工作进程,主进程负责读取和计算配置以及维护工作进程,工作进程处理真正的请求,配置文件默认为/etc/nginx/nginx.conf
启动、停止和重启
相关操作要使用以下语法
nginx -s signal
其中signal可取
- stop 强制立刻停止
- quit 停止但是要等当前的请求处理完
- reload 重启
- reopen 重新打开日志记录,可用于旧日志文件移走后,重新生成日志文件
配置文件的结构
nginx包含很多模块,我们可以使用配置文件中的指令进行控制。
一个简单的指令包含空格分开的name和参数,最后加一个分号。
一个块指令(block directive)和一个简单指令类似,但是结尾的不是分号而是一个花括号,如果在花括号中有其他指令,则被称为一个上下文(context),比如 events, http, server, and location。任何上下文之外的地方被认为是主上下文(main context),其中events and http指令在主上下文,server 在http上下文,location在server上下文。
井号后的内容被认为是注释。
静态资源服务
web服务器可以用来提供静态资源访问,可以根据请求来访问不同路径, 比如在http上下文添加以下配置
server {
location / {
root /data/www;
}
location /images/ {
root /data;
}
}
location块指令的参数进行匹配,如果一个请求能匹配到多个路径则以最长的为准。
比如请求/
就会匹配第一个,去/data/www/
获取资源,请求/images/
就会匹配第二个,到/data/images/
中获取资源。
代理服务器
代理服务器是一个服务器,当收到请求,会把请求发到被代理的服务器,然后将获取的请求发送给客户端。
我们这里做一个简单的代理服务器,接收80端口的请求,其中图片使用本地目录,其他请求发送到8080端口。
在配置文件中使用两个server块指令,第一个监听80端口,对于图片我们使用正则检查相关后缀,正则前面要使用~
。
server {
location / {
proxy_pass http://localhost:8080;
}
location ~ \.(gif|jpg|png)$ {
root /data/images;
}
}
另一个监听8080端口,在这里server上下文中包含root字段,当location上下文中没有root参数时会默认使用这个。
server {
listen 8080;
root /data/up1;
location / {
}
}
nginx怎么处理一个请求
基于name的虚拟服务器
我们可以配置三个监听80端口的虚拟服务器
server {
listen 80;
server_name example.org www.example.org;
...
}
server {
listen 80;
server_name example.net www.example.net;
...
}
server {
listen 80;
server_name example.com www.example.com;
...
}
这个配置会对请求header中的host字段进行路由,如果没有匹配到,就会路由到默认服务器,默认服务器是第一个,也可以通过参数default_server指定
server {
listen 80 default_server;
server_name example.net www.example.net;
...
}
如果不允许没有host字段的请求访问,则可以采用以下配置关闭连接,其中空字符的name可以对其进行匹配
server {
listen 80;
server_name "";
return 444;
}
这里的server_name可以使用以下形式表示
- 准确的name
- 以星号开始,比如
*.example.org
- 以星号结尾,比如
mail.*
- 正则
使用http负载均衡
跨多个应用实例的负载均衡通常用于优化资源利用、最大化吞吐量、减少延迟和容错。
我们可以使用nginx作为一个有效的负载均衡器来将流量分配到多个应用服务器,来提高性能、稳定性和可靠性。
nginx负载均衡的方法有三种
- round-robin 将请求轮流分配
- least-connected 将请求分配给最小序号的活跃连接
- 基于client的ip对应的hash值进行分配,这样可以保证同一个请求被同一个服务器处理
最简单的配置这样的
http {
upstream myapp1 {
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
server {
listen 80;
location / {
proxy_pass http://myapp1;
}
}
}
默认round-robin,如果要使用least-connected或ip_hash则在服务器组中添加指令
upstream myapp1 {
least_conn;#或ip_hash
server srv1.example.com;
server srv2.example.com;
server srv3.example.com;
}
配置https
需要添加ssl参数(http2参数可以开启http2),和指定相关证书和私钥
server {
listen 443 ssl http2;
server_name www.example.com;
ssl_certificate www.example.com.crt;
ssl_certificate_key www.example.com.key;
...
}
为了将http请求转发给https所以,要把80端口的数据转发到https
server {
listen 80;
rewrite ^(.*)$ https://$host$1
}
添加header
可以在 http, server, location上下文使用add_header
添加响应header,语法
add_header name value [always];
比如
location / {
add_header Cache-Control 0;
}
完结
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!