nginx常用配置
### 常用nginx配置
events {
#定义每个进程的最大连接数,受系统进程的最大打开文件数量限制。
worker_connections 1024;
}
#######Nginx的Http服务器配置,Gzip配置
http {
#主模块指令,实现对配置文件所包含的文件的设定,可以减少主配置文件的复杂度,DNS主配置文件中的zonerfc1912,acl基本上都是用include语句。
include mime.types;
#核心模块指令,智力默认设置为二进制流,也就是当文件类型未定义时使用这种方式
default_type application/octet-stream;
#下面代码为日志格式的设定,main为日志格式的名称,可自行设置,后面引用
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#引用日志main
#access_log logs/access.log main;
#设置允许客户端请求的最大的单个文件字节数 文件上传经常用到
#client_max_body_size 20M;
#设置客户端连接保存活动的超时时间
#keepalive_timeout 0;
keepalive_timeout 65;
#设置客户端请求读取超时时间
#client_header_timeout 10;
#设置客户端请求主体读取超时时间
#client_body_timeout 10;
#用于设置相应客户端的超时时间
#send_timeout
####HttpGZip模块配置
#httpGzip modules
#开启gzip压缩
#gzip on;
#设置允许压缩的页面最小字节数
#gzip_min_length 1k;
#申请4个单位为16K的内存作为压缩结果流缓存
#gzip_buffers 4 16k;
#设置识别http协议的版本,默认为1.1
#gzip_http_version 1.1;
#指定gzip压缩比,1-9数字越小,压缩比越小,速度越快
#gzip_comp_level 2;
#指定压缩的类型
#gzip_types text/plain application/x-javascript text/css application/xml;
#让前端的缓存服务器进过gzip压缩的页面
#gzip_vary on;
#########Nginx的server虚拟主机配置
server {
#监听端口为 80
listen 80;
#设置主机域名
server_name localhost;
#设置访问的语言编码
#charset koi8-r;
#设置虚拟主机访问日志的存放路径及日志的格式为main
#access_log logs/host.access.log main;
#设置虚拟主机的基本信息
location / {
#设置虚拟主机的网站根目录
#root根路径配置,用于访问文件系统,在匹配到location配置的URL路径后,指向【root】配置的路径,并把location配置路径附加到其后
#alias别名配置,用于访问文件系统,在匹配到location配置的URL路径后,指向【alias】配置的路径,不会对请求路径做任何修改
#这里配置的是根目录所以用的是root
root /usr/share/nginx/html;
#alias /usr/share/nginx/html;
#设置虚拟主机默认访问的网页,比如访问xxx.com默认访问的是xxx.com/index.html
index index.html index.htm;
}
#404错误页面,想要页面提示体验好些可以在这里做手脚
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
# 服务器错误重定向页面,想要页面提示体验好些可以在这里做手脚
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
#匹配路径可以是正则
location ^~ /xqy-portal-web/ {
#反向代理配置,匹配转发的到的服务
proxy_pass http://yqdz.manage-test.sit.91lyd.com/xqy-portal-web/;
#经常说跨域请求配置
#add_header Access-Control-Allow-Origin '*';
#add_header Access-Control-Allow-Methods 'GET,POST,OPTIONS';
#proxy_set_header允许重新定义或者添加发往后端服务器的请求头
#value可以包含文本、变量或者它们的组合。 当且仅当当前配置级别中没有定义proxy_set_header指令时,会从上面的级别继承配置。 默认情况下,只有两个请求头会被重新定义:
#$host、$http_host和$proxy_host 是nginx内部导出的变量
#$host 不显示端口 浏览器请求的ip,不显示端口
#$http_host 端口存在则显示 浏览器请求的ip和端口号
#$proxy_host 默认80端口不显示,其它显示 被代理服务的ip和端口号
#$proxy_add_x_forwarded_for、$remote_addr是一对,nginx均衡负载或有cdn服务的时候有用,详细解释自行百度
proxy_set_header Host $proxy_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
常见问题
本地启动了nginx没有权限访问?
错误信息:nginx: [warn] the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /usr/local/nginx/conf/nginx.conf:2
解决方案:在nginx.conf配置文件最上面有一个user配置,默认是nobody,这里网上也有各种方法修改权限,也都试了还是不行,最后把user 后面的用户名字改成当前电脑登录的用户并且加上staff。栗子:user myame staff。
怎么配置多个服务?
配置多个server就好了,不过要注意不同server之建端口号不能重复。不同服务可以有不同的配置,比如文件上传服务client_max_body_size、超时时间要把正常接口请求要大很多。
另外前端开发可以灵活配置多个server来访问不同环境的服务。
想用本地前端项目代码怎么配置?
#静态资源
location ^~ /xxx/ {
#注意这里用的alias不是root或者proxy_pass
alias /Users/codebase/xxx/xxx/dist/; #文件目录
proxy_set_header Host $proxy_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
#服务请求
location ^~ /xxx/xxx/ {
proxy_pass http://127.0.0.1:8080/xxx; #ip+端口+路径 也可以是本地服务的地址
proxy_set_header Host $proxy_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
#服务请求
location ^~ /xxx/ {
proxy_pass http://127.0.0.1:8080/; #ip+端口+路径 也可以是本地服务的地址
proxy_set_header Host $proxy_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
想用服务器的前端代码怎么配置?
服务端想访问服务器上的前端代码,服务用本地的断点调试怎么配置?
# 静态资源
location ^~ /xxx/ {
#注意这里用的proxy_pass不是alias或root
proxy_pass htt://服务ip或者域名/xxx/; #文件目录 也可以是本地服务的地址
proxy_set_header Host $proxy_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
#服务请求
location ^~ /xxx/xxx/ {
proxy_pass http://127.0.0.1:8080/xxx; #ip+端口+路径 也可以是本地服务的地址
proxy_set_header Host $proxy_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
#服务请求
location ^~ /xxx/ {
proxy_pass http://127.0.0.1:8080/; #ip+端口+路径 也可以是本地服务的地址
proxy_set_header Host $proxy_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
怎么更优雅的整理nginx配置文件?include、upstream大法?
upstream可以定义变量
#upstream可以定义变量
upstream my_ip{
server 127.0.0.1;
}
#其他地方就可以直接使用my_ip变量了
#另外nginx中可以直接使用host文件中定义的域名,例如上面的定义可以写成下面的形式
upstream my_ip{
server localhost;
}
#使用举例
location ^~ /xqy-portal-web/manage/ {
proxy_pass http://my_ip/manage; #ip + 端口 + 路径
proxy_set_header Host $proxy_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
#include导入代码片段,可以是server、location、或者一段字符串
#include导入代码片段,可以是server、location、或者一段字符串
#文件a.conf
location ^~ /xqy-portal-web/manage/ {
proxy_pass http://my_ip/manage; #ip + 端口 + 路径
proxy_set_header Host $proxy_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
#同级目录下下文件nginx.conf使用
http {
server {
listen 8080;
#server_name *.com #可以实现多个server监听同一个端口,比如都是80端口配置不同域名路由到不同的首地址,我们暂时用不到可忽略
client_max_body_size 100M; #上传文件的时候可能会用到
access_log /Users/zhangnanning/codebase/host.access.log main; #日志配置
#使用include导入
include a.conf
#error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
nginx常用命令
sudo nginx 启动nginx
sudo nginx -s relaod 保存并重启nginx
nginx -t 检查nginx是否有错