上一章我們簡單說明了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 的相關內容,不是很全,也不是很詳細,但是重在分享,歡迎大家一起交流。