经常遇到Nginx安装和配置的问题。这里笔者将常用配置统统写在下面,方便咱们日常使用。这里本着开箱即用的原则,所以大多数时候不会解释为什么要这样去配置,也不涉及Nginx的安装步骤。下面的所有配置,都可以直接复制后粘贴使用,只要改改ip地址或者端口就可以了。
案例一
nginx作为静态文件服务器、图片服务器使用
server {listen 80;server_name abc.com;location / {root /home/appadmin/www/images;index index.html;}
}
案例二
反向代理后端的8080端口到nginx 80 端口
server {listen 80;server_name abc.com;location / {proxy_pass http://localhost:8080/;index index.html;}
}
案例三
反向代理后获取不到客户访问的ip或一些header信息,就用下面的配置
server {listen 80;server_name abc.com;location / {proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Real-PORT $remote_port;proxy_set_header host $host;proxy_set_header X-Forwarded-Host $host;proxy_set_header X-Forwarded-Server $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://localhost:8080/;index index.html;}
}
案例四
反向代理,并配置https
server {listen 443 ssl;server_name abc.com;ssl_certificate /ssl/abc.pem; # 这里可以是pem或者crt文件ssl_certificate_key /ssl/abc.key;ssl_session_timeout 5m;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;ssl_prefer_server_ciphers on;location / {proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Real-PORT $remote_port;proxy_set_header host $host;proxy_set_header X-Forwarded-Host $host;proxy_set_header X-Forwarded-Server $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://localhost:8080/;}
}
案例五
将http强制跳转到https,也就是用户访问80端口的时候,自动跳转到443
server {listen 80;server_name abc.com;return 301 https://$host$request_uri;
}
案例六
是案例五的另外一种实现方法
server {listen 80;server_name abc.com;location / {rewrite ^(.*)$ https://abc.com$1 permanent;}
}
案例七
www跳转到不带www的域名上
server {listen 80;server_name abc.com www.abc.com;if ( $host = 'www.abc.com' ) {rewrite ^/(.*)$ http://abc.com/$1 permanent;}
}
案例八
负载均衡。策略有好几种,这里只配置ip_hash
http {upstream my-server {ip_hash; server localhost:8080 weight=1;server localhost:8081 weight=2;}server {listen 80;server_name localhost;location / {proxy_pass http://my-server;proxy_redirect default;}}
}
案例九
TCP反向代理。Nginx默认是不支持TCP代理的,要支持TCP代理,在安装Nginx的时候要开启 stream模块。就是在编译的时候添加--with-stream参数。
以代理本机的SSH为例。
stream {upstream backend {server 127.0.0.1:22;}server {listen 2222;proxy_connect_timeout 1s;proxy_timeout 1h;proxy_pass backend;}
}
需要留一个一个参数proxy_timeout,这个是代理超时的意思,建议设置大一点,当你设置为几秒的时候,你连接上去很快就会掉线。
案例十
websocket代理
location /ws {proxy_pass http://localhost:8080/websocket;proxy_http_version 1.1;proxy_set_header Upgrade $$http_upgrade; # 必须参数proxy_set_header Connection "Upgrade"; # 必须参数proxy_set_header X-Real-IP $$remote_addr;
}