相关文件位置
/usr/sbin/nginx
:主程序/etc/nginx
:存放配置文件/usr/share/nginx
:存放静态文件/var/log/nginx
:存放日志
注意:通常修改的配置文件为/etc/nginx/nginx.conf
提示:更改配置后立即生效命令nginx -s reload
配置文件
配置文件分为3个部分:
- 全局块
- events块
- http块
全局块
配置一些影响nginx服务器运行的配置指令
# 数值越大支持的并发数越多
worker_processes auto;
events块
影响nginx服务器和用户的网络连接
# 支持的最大连接数
worker_connections 768;
http块
主要配置部分
反向代理配置示例
# 域名转发
server {
listen 80; # 监听端口
server_name 47.93.85.32; # 监听访问的网址或域名
location / {
root html;
proxy_pass http://localhost:8001; # 代理地址,真实访问地址
index index.html;
}
}
# 指定带有某路径的转发
server {
listen 80;
server_name 47.93.85.32;
location ~ /test1 {
root html;
proxy_pass http://localhost:8001;
index index.html;
}
location ~ /test2 {
root html;
proxy_pass http://localhost:8002;
index index.html;
}
}
location后参数解释
- = :用于不含正则表达式,严格匹配
- ~ :含正则表达式,区分大小写
- ~* :含正则表达式,不分区大小写
负载均衡配置示例
http {
upstream myserver {
ip_hash;
server 192.168.10.10:8080 weight=1;
server 192.168.10.10:8081 weight=1;
}
server {
location / {
proxy_pass http://myserver;
proxy_connect_timeout 10;
}
}
}
负载均衡算法:
轮询:默认,每个请求按时间顺序逐一分配到各个服务器,如果某服务器down掉,自定剔除不在分配请求
upstream myserver {
server 192.168.10.10:8080;
server 192.168.10.10:8081;
}
权重:默认1,数值越大分配请求越多
upstream myserver {
server 192.168.10.10:8080 weight=1;
server 192.168.10.10:8081 weight=1;
}
哈希法:每个请求IP的hash结果分配,每个IP分配到固定服务器,可以解决session问题
upstream myserver {
ip_hash;
server 192.168.10.10:8080;
server 192.168.10.10:8081;
}
fair:按服务器相应时间分配,相应时间短的优先分配
upstream myserver {
server 192.168.10.10:8080;
server 192.168.10.10:8081;
fair;
}
动静分离配置示例
location /www/ {
root /data/;
index index.html index.htm;
}
前后端分离配置实例
##
# My Config
##
server {
listen 80;
server_name fanmr.top;
# front_end
location / {
root /home/fan/front/;
index index.html;
}
# back_end
location /back_end {
root html;
proxy_pass http://localhost:8000;
index index.html;
}
}
使用了Router的情况
如果使用了Router进行路由转发,直接访问资源路径需要Nginx对路由配置
server {
listen 80;
server_name xxx.com;
location / {
root /usr/local/shouwei;
index index.html index.htm;
if (!-e $request_filename) {
rewrite ^/(.*) /index.html last;
break;
}
}
}
地址重写
# 接口
location /api {
proxy_pass http://localhost:8888;
rewrite ^/api/(.*)$ /$1 break;
}
将 /api/xxx 转发到 /xxx
配置http转https
http默认的访问端口为80
,https默认访问的端口为443
,通常情况下443端口的访问有SSL证书的,如果想访问http也有证书,方案为重定向到https即可
server {
listen 80;
server_name 域名.com;
rewrite ^(.*) https://$server_name$1 permanent;
}
HTTPS
需要证书,放与config同级
server {
listen 443 ssl;
server_name admintest.lhxn.cc;
ssl_certificate 6243654__lhxn.cc_nginx/6243654__lhxn.cc.pem;
ssl_certificate_key 6243654__lhxn.cc_nginx/6243654__lhxn.cc.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root /usr/local/lhxn-admin-static;
index index.html index.htm;
}
}
高可用主备模式
Nginx高可用,增加一台备用Nginx,当主Nginx宕机后备用Nginx能保持服务运行
- 需要两台Nginx
- 需要安装keepalived
- 需要虚拟IP
自动解析为第一个server问题
配置nginx的server_name时,所有未匹配的域名默认解析到http的第一个server网站,这点务必注意!
请求头带_丢失问题
请求头中带有下划线的请求字段默认都会丢失。
解决办法:
方法一:请求头字段不要带下划线
方法二:修改配置
文件上传大小限制
默认1M,当超过大小的时候会报413(too large)错误
location / {
...
client_max_body_size 100m;
}
证书过期问题
https证书过期后,替换新的证书,需要使用nginx -s reload
命令重启nginx才可,否则依然获取的是旧证书