经常遇到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;
}