Nginx学习笔记(配置)
2019-03-16 本文已影响0人
佳学说
一、官网
官网配置 https://docs.nginx.com/nginx/admin-guide/ ,个人建议大家尽量学一手知识,阅读官网文档。虽然google、baidu或者Stack Overflow让大家快速获取知识,但是信息经过他人处理必然会存在信息损失。所以个人比较推崇的流程是先从官网学习,带着不理解的问题去查阅资料这样会事半功倍。
二、配置
废话少说,撸配置文件nginx.conf
user nobody;
# 用户组,有权限启动nginx的用户
# 还可以配置error_log、引用其他文件(include)、工作进程数(work_processes)等
events {
# 配置时间模型(use)、最大连接数(work_connections)
}
http {
# Configuration specific to HTTP and affecting all virtual servers
server {
# configuration of HTTP virtual server 1
location /one {
# configuration for processing URIs starting with '/one'
}
location /two {
# configuration for processing URIs starting with '/two'
}
}
server {
# configuration of HTTP virtual server 2
}
}
stream {
# Configuration specific to TCP/UDP and affecting all virtual servers
server {
# configuration of TCP virtual server 1
}
}
事件驱动模型有select、poll、kqueue、epoll等,再下一篇笔记中会介绍。
最大并发连接数 = work_connections * work_processes
http块、server块和location块配置项比较多,会通过例子介绍常用配置,如果没介绍到的希望大家去官网翻翻。
三、实例
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; #nginx主进程pid存放路径
events {
use epoll;
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;
#服务端连接保持时间
keepalive_timeout 60;
# 下游服务器
upstream app {
# 默认权重1
server 192.168.1.2:80 weight=2;
server 192.168.1.3:80 weight=2;
server 192.168.1.4:80;
}
# 虚拟服务器
server {
# 端口
listen 80;
# 域名
server_name www.myweb.com;
# 处理https://www.myweb.com/one请求
location /one{
# 请求根目录
root /myweb/one;
index index.html index.htm;
}
# 处理https://www.myweb.com请求
location / {
# 请求根目录
root /myweb;
index index.html index.htm;
}
# 错误码对应页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /myweb;
}
}
# 反向代理,请求转发至app,并设置header字段
server {
listen 8081;
server_name app.myweb.com;
location / {
proxy_pass http://app;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
将下游服务器app配置在nginx配置中显得特别笨重,多台nginx配置同步也是一个大问题,所以大公司常规做法是开发自己的域名服务器,通过域名找到机器列表(带权重值),然后进行转发,而非直接配置方式。
四、其他
- server_name如果没注册到DNS是不能被其他人访问的。
- 强烈建议撸一遍nginx官网,本人正在看,可以一起交流。(微信453478062)
- 简单解释反向代理&正向代理
- 正向代理:例如wifi热点、网关出口,粗俗讲通过其上网的设备。
- 反向代理:大网站不希望所有机器暴露给公网,通过反向代理做一次中转。 - 反向代理用途:防攻击,https转http、负载均衡、静态缓存等等。