上一章我们简单说明了Nginx 是什么,可以干什么,那么,在这里我就对使用方面做一些讲解。
前提:
一台服务器,一个域名,多个子域名,外加SSL 证书,实现通过 80 端口,进行域名区分,映射
需要实现的功能:
1.通过Nginx 对 域名进行反向代理,并且做简单的负载均衡
2.对子域名进行不同的代理配置,遇到对应的子域名,跳转到对应的服务
3.SSL 证书配置, HTTP 转为 HTTPS (这里只有1个单域名证书)
我先展示我的全部配置代码:
user nginx;
worker_processes 1;
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;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
upstream blog {
server 172.17.0.2:8888;
server 172.17.0.3:8888;
server 172.17.0.4:8888;
}
upstream api {
server 172.17.0.7:10000;
}
upstream yapi {
server 172.17.0.12:9191;
}
server {
listen 80;
server_name yapi.iuver.cn;
location / {
proxy_pass http://yapi/;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 80;
server_name git.iuver.cn;
location / {
proxy_pass http://gitee.com/billy_git/projects;
}
}
server {
listen 80;
server_name www.iuver.cn iuver.cn;
rewrite ^(.*)$ https://$host$1 permanent;
}
server {
listen 443 ssl;
server_name www.iuver.cn iuver.cn;
ssl on;
ssl_certificate cert/1600551_www.iuver.cn.pem;
ssl_certificate_key cert/1600551_www.iuver.cn.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://blog/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /api {
proxy_pass http://api/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
对于我们的配置, 主要关注点在 http {} 整个模块中
1,实现对域名进行反向代理,并且做简单的负载均衡
我首先对我个人的网站进行一个反向代理,并且做一个简单的负载均衡,代码如下
upstream blog {
server 172.17.0.2:8888;
server 172.17.0.3:8888;
server 172.17.0.4:8888;
}
server {
listen 80;
server_name www.iuver.cn iuver.cn;
location / {
proxy_pass http://blog/;
}
}
此段代码是完整代码中拆解出来的,通过监听 80 端口,对 www.iuver.cn、iuver.cn 进行反向代理作业,代理作业内容为 upstream blog 代码块中的服务器地址及端口,并且是一个简单的负载模式,每个请求会平均分摊到每个 Server 中的地址去,当然,每个 Server 也可以进行其他的一些设置, 比如说权重,根据权重,对于反向代理的分配也会根据权重的不同。
2,实现对子域名进行不同的代理配置,遇到对应的子域名,跳转到对应的服务
upstream yapi {
server 172.17.0.12:9191;
}
server {
listen 80;
server_name yapi.iuver.cn;
location / {
proxy_pass http://yapi/;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 80;
server_name git.iuver.cn;
location / {
proxy_pass http://gitee.com/billy_git/projects;
}
}
此段代码分别对我的2个子域名进行了解析,并且分别做了 正向代理 和 反响代理,2个作业,yapi 为反响代理,git 为正向代理
3.实现SSL 证书配置, HTTP 转为 HTTPS (这里只有1个单域名证书)
upstream blog {
server 172.17.0.2:8888;
server 172.17.0.3:8888;
server 172.17.0.4:8888;
}
server {
listen 80;
server_name www.iuver.cn iuver.cn;
rewrite ^(.*)$ https://$host$1 permanent;
}
server {
listen 443 ssl;
server_name www.iuver.cn iuver.cn;
ssl on;
ssl_certificate cert/1600551_www.iuver.cn.pem;
ssl_certificate_key cert/1600551_www.iuver.cn.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://blog/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP$remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /api {
proxy_pass http://api/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP$remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
这里是 SSL 证书配置,监听 80 端口, 遇到 www.iuver.cn、iuver.cn 时 会对请求协议类型进行拆解,通过以下代码转换为 HTTPS 安全类型进行请求。
rewrite ^(.*)$ https://$host$1 permanent;
证书配置监听端口为 443, 这里会对 80 端口改变的请求类型进行监听,然后做对应的转换及认证工作,并作请求转发等工作
以上内容是我目前使用到 Nginx 的相关内容,不是很全,也不是很详细,但是重在分享,欢迎大家一起交流。