前言
打算做一个拿来主义文章系列,文章简单粗暴,没有原理分析,只有怎装、怎么用和怎么配等等,保证在指定的环境下配置可用。本人不提倡纯粹的拿来主义,希望兄弟们拿了之后可以深入的去研究一下其中的好赖和机制原理。废话不多说,开篇Nginx常用代理配置。
环境
- 系统:腾讯云服务器 CentOS 7.9 64位(内核版本:3.10.0-1160.59.1.el7.x86_64)
- Nginx:1.23.1,安装SSH和Stream模块
- 读者:有一定的Nginx安装使用基础
反向代理
你希望通过域名server_name www.test.com 和访问服务器中部署在其他端口上运行的服务(proxy_pass http://127.0.0.1:8080)使用此配置
proxy_pass 也可以是服务器能访问的任何地址的服务,例如说:www.baidu.com
server {
server_name www.test.com;
listen 80;
server_name_in_redirect off;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {
proxy_pass http://127.0.0.1:8080;
index index.html index.htm index.jsp;
}
}
SSL
在反向代理的基础上还要支持https访问,使用此配置。Nginx需要使用SSL模块编译安装,配置前需要获得证书,并上传到服务器目录,例如:/usr/local/nginx/cert,对应配置:ssl_certificate /usr/local/nginx/cert/xxxx.pem;和ssl_certificate_key /usr/local/nginx/cert/xxxx.key;
server {
server_name www.test.com;
listen 80;
listen 443 ssl;
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
ssl_certificate /usr/local/nginx/cert/xxxx.pem;
ssl_certificate_key /usr/local/nginx/cert/xxxx.key;
ssl_prefer_server_ciphers on;
ssl_ciphers HIGH:!aNULL:!MD5;
server_name_in_redirect off;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {
proxy_pass http://127.0.0.1:8080;
index index.html index.htm index.jsp;
}
}
静态代理
快速创建一个静态网站就用此配置,页面上传到指定的服务器目录root /home/mywebsite;即可开启访问.
server {
server_name www.test.com;
listen 80;
location / {
# 静态文件目录
root /home/mywebsite;
index index.html index.htm;
}
}
文件下载
快速搭建一个下载服务使用此配置,提供下载的文件上传到指定的服务器目录alias /home/download; 即可
server {
server_name www.test.com;
listen 80;
location /download {
# 下载文件目录
alias /home/download;
add_header Content-Disposition attachment;
add_header Content-Type application/octet-stream;
sendfile on; # 开启高效文件传输模式
autoindex on; # 开启目录文件列表
autoindex_exact_size on; # 显示出文件的确切大小,单位是bytes
autoindex_localtime on; # 显示的文件时间为文件的服务器时间
charset utf-8,gbk; # 避免中文乱码
}
}
代理MySQL
如果需要代理MySQL请求,使用此配置。Nginx需要使用Stream模块编译安装。可以通过服务器域名或者IP访问服务器指定端口listen 63306;来访问指定的MySQL服务server my.test.com:3306;,配置完后记得到防火墙里面放开服务器的端口。
注意:stream与http是同一层级的配置
stream {
upstream mysql {
server my.test.com:3306;
}
server {
listen 63306;
proxy_connect_timeout 10s;
proxy_timeout 30s;
proxy_pass mysql;
}
}