nginx 是一个开源的高性能 web 服务器(多是性能最好的),使用很是普遍,既能够用来部署静态资源,也能够用来做为反向代理,甚至能够做为负载均衡服务器。javascript
# 安装 yum install nginx # 启动 service start nginx # 从新加载配置 nginx -s reload
默认的配置文件在 /etc/nginx/nginx.conf
,这个文件是配置文件的入口,通常配置一些全局信息css
user nginx; worker_processes auto; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/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 /var/log/nginx/access.log main; sendfile on; keepalive_timeout 65; include /etc/nginx/conf.d/*.conf; }
这个配置文件里面通常会有一句 include /etc/nginx/conf.d/*.conf
,包含各个子服务的配置信息html
只须要在 /etc/nginx/conf.d
中新增一个文件 example.com.conf
java
server { listen 80; # 这里设置服务的名字 server_name example.com; access_log /var/log/nginx/example.log main; error_log /var/log/nginx/example.err main; location / { # 这里设置静态资源的路径 root /var/www/example; try_files $uri $uri/ /index.html; index index.html index.htm; } }
server_name
: 服务的名字,用户经过这个名字访问服务,不一样的服务使用不一样的 server_name 区分,同一个 nginx 实例下可部署多个服务root
: 静态资源路径access_log
: 日志输出路径,日志格式经过最后一个参数指定,这里的 main 为日志格式名,来自于上一个配置文件中的 log_format
一样在 /etc/nginx/conf.d
中新增一个文件 proxy.conf
nginx
upstream yourservice { keepalive 32; server yourserver:<port>; } server { listen 80; server_name proxy; access_log /var/log/nginx/proxy.log access; error_log /var/log/nginx/proxy.err; location / { proxy_pass http://yourservice; proxy_redirect off; proxy_set_header Host $host; proxy_set_header User-Agent $http_user_agent; proxy_set_header X-Real-IP $http_x_real_ip; proxy_set_header X-Forwarded-For $http_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
upstream
: 定义一个服务,server
里面能够指定多个后端服务地址,利用 nginx 做负载均衡proxy_pass
: 反向代理到咱们定义的服务中proxy_set_header
: 请求服务时设置一些头部字段,好比 userAgent 和 客户端 ip客户端 ip 通常设置在 X-Real-IP 和 X-Forwarded-Forgit
nginx 的配置文件中提供了大量的内置变量github
$romote_addr
: 客户端 ip 地址$remote_user
: 客户端用户名称$time_local
: local 格式时间$time_iso8601
: iso8601 格式时间$scheme
: http 协议$request
: 请求的 url 和 http 协议$status
: 返回的状态码$body_bytes_sent
: 返回的包体大小$http_referer
: 请求页面来源,header["Referer"]$http_user_agent
: 浏览器信息,header["User-Agent"]$http_x_real_ip
: 用户真实 ip,header["X-Real-IP"]$http_x_forwarded_for
: 代理过程,header["X-Forwarded-For"]若是有日志分析的需求,最好使用 json 格式的日志,能够经过 log_format
命令自定义日志格式web
http { log_format access escape=json '{' '"@timestamp":"$time_iso8601",' '"remoteAddr":"$remote_addr",' '"remoteUser":"$remote_user",' '"xRealIP":"$http_x_real_ip",' '"xForwardedFor":"$http_x_forwarded_for",' '"request":"$request",' '"status": $status,' '"bodyBytesSent":"$body_bytes_sent",' '"resTimeS":"$request_time",' '"referrer":"$http_referer",' '"userAgent":"$http_user_agent"' '}'; }
这个日志格式能够定义在 /etc/nginx/nginx.conf
的 http 字段中,各个 server 就能够直接引用docker
server { access_log /var/log/nginx/example.log access; }
若是但愿日期格式显示为北京时间,须要设置一下时区json
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime echo "Asia/Shanghai" >> /etc/timezone
返回的静态资源比较大,带宽成为瓶颈,能够考虑开启 gzip 压缩,200k 的文件能压缩到 几十k,效果还挺明显的,开启 gzip 的配置也很简单,直接修改 /etc/nginx/nginx.conf
便可
http { gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_comp_level 8; gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript; gzip_vary on; gzip_disable "MSIE [1-6]\."; }
转载请注明出处
本文连接: https://tech.hatlonely.com/edit/53