【nginx】
@
写在前面
nginx
静态
配置文件位于 /etc/nginx/nginx.conf , 下列命令会引用/etc/nginx/conf.d目录下所有的.conf文件,这样可以保持主配置文件的简洁,同时配个多个.conf文件方便区分,增加可读性。
include /etc/nginx/conf.d/*.conf;
server {
listen 80; #监听端口
server_name localhost;
location / {
root /usr/share/nginx/html; #根目录
index index.html index.htm; #首页
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
框架
#HTTP代理
http {
server {
listen 8002;
proxy_pass http://localhost:8080/;
}
}
#TCP代理
stream {
server {
listen 13306;
proxy_pass localhost:3306;
}
}
本地文件
-
listen
监听可以配置成IP或端口或IP+端口
listen 127.0.0.1:8000;
listen 127.0.0.1;( 端口不写,默认80 )
listen 8000;
listen *:8000;
listen localhost:8000; -
server_name
server_name主要用于区分,可以随便起。
也可以使用变量 $hostname 配置成主机名。
或者配置成域名: example.org www.example.org *.example.org
如果多个server的端口重复,那么根据域名或者主机名去匹配 server_name 进行选择。
下面的例子中:
curl http://localhost:80会访问/usr/share/nginx/html
curl http://nginx-dev:80会访问/home/AdminLTE-3.2.0
# curl http://localhost:80 会访问这个
server {
listen 80;
server_name localhost;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
# curl http://nginx-dev:80 会访问这个
server{
listen 80;
server_name nginx-dev;#主机名
location / {
root /home/AdminLTE-3.2.0;
index index.html index2.html index3.html;
}
}
反向代理
- 常用变量的值:
- $host:nginx主机IP,例如192.168.56.105
- $http_host:nginx主机IP和端口,192.168.56.105:8001
- $proxy_host:localhost:8088,proxy_pass里配置的主机名和端口
- $remote_addr:用户的真实IP,即客户端IP。
- 非HTTP代理
如果要将请求传递到非 HTTP 代理服务器,可以使用下列指令:- fastcgi_pass 将请求转发到FastCGI服务器(多用于PHP)
- scgi_pass 将请求转发到SCGI server服务器(多用于PHP)
- uwsgi_pass 将请求转发到uwsgi服务器(多用于python)
- memcached_pass 将请求转发到memcached服务器
参考
location /some/path/ {
#nginx的主机地址
proxy_set_header Host $http_host;
#用户端真实的IP,即客户端IP
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8088;
}
修饰符
- location 修饰符
location可以使用修饰符或正则表达式
修饰符:
=
等于,严格匹配 ,匹配优先级最高。
^~
表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其它 location。优先级第二高。
~
区分大小写
~*
不区分大小写 - 优先级
优先级从高到低依次为:。- 精确匹配(=)
- 前缀匹配(^~)
- 正则匹配(~和~*)
- 不写
server{
location / {
proxy_pass http://localhost:8080/;
}
location = /html/ie.html {
root /home/www/static;
}
location ^~ /fonts/ {
root /home/www/static;
}
location ~ \.(css|js|png|jpg|gif|ico) {
root /home/www/static;
}
缓冲(buffer)和缓存(cache)
-
缓冲
- proxy_max_temp_file_size设置临时文件的最大值。
- proxy_temp_file_write_size设置一次写入临时文件的大小。
-
缓存
- proxy_cache_path 设置缓存本地文件目录名称大小
- proxy_cache_valid 缓存超过最大配置大小时,按照时间删除最旧的数据。
- proxy_cache_key "\(host\)request_uri$cookie_user"; 自定义缓存键
proxy_cache_path /var/cache/nginx/data keys_zone=mycache:10m; # 定义缓存的本地文件目录,名称和大小
server {
listen 8001;
server_name ruoyi.localhost;
location / {
#设置buffer
proxy_buffers 16 4k;
proxy_buffer_size 2k;
proxy_pass http://localhost:8088;
}
location ~ \.(js|css|png|jpg|gif|ico) {
#设置cache
proxy_cache mycache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_valid any 5m;
proxy_pass http://localhost:8088;
}
location = /html/ie.html {
proxy_cache mycache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_valid any 5m;
proxy_pass http://localhost:8088;
}
location ^~ /fonts/ {
proxy_cache mycache;
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
proxy_cache_valid any 5m;
proxy_pass http://localhost:8088;
}
}
负载均衡
-
轮循机制(round-robin)
默认机制,以轮循机制方式分发。 -
最小连接(least-connected )
将下一个请求分配给活动连接数最少的服务器(较为空闲的服务器)。
upstream backend {
least_conn;
server backend1.example.com;
server backend2.example.com;
}
- ip-hash
客户端的 IP 地址将用作哈希键,来自同一个ip的请求会被转发到相同的服务器。
此方法可确保来自同一客户端的请求将始终定向到同一服务器,除非此服务器不可用。
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
}
- hash
通用hash,允许用户自定义hash的key,key可以是字符串、变量或组合。
例如,key可以是配对的源 IP 地址和端口,也可以是 URI,如以下示例所示:
请注意:基于 IP 的哈希算法存在一个问题,那就是当有一个上游服务器宕机或者扩容的时候,会引发大量的路由变更,进而引发连锁反应,导致大量缓存失效等问题。
upstream backend {
hash $request_uri consistent;
server backend1.example.com;
server backend2.example.com;
}
5.随机 (random)
每个请求都将传递到随机选择的服务器。
two是可选参数,NGINX 在考虑服务器权重的情况下随机选择两台服务器,然后使用指定的方法选择其中一台,默认为选择连接数最少(least_conn)的服务器。
upstream backend {
random two least_conn;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
server backend4.example.com;
}
- 权重(weight)
每 5 个新请求将按如下方式分布在应用程序实例中:3 个请求将定向到performance.server,一个请求将转到app1.server,另一个请求将转到app2.server。
upstream my-server {
server performance.server weight=3;
server app1.server;
server app2.server;
}
7.健康检查
在反向代理中,如果后端服务器在某个周期内响应失败次数超过规定值,nginx会将此服务器标记为失败,并在之后的一个周期不再将请求发送给这台服务器。
通过fail_timeout 来设置检查周期,默认为10秒。
通过max_fails来设置检查失败次数,默认为1次。
在以下示例中,如果NGINX无法向服务器发送请求或在30秒内请求失败次数超过3次,则会将服务器标记为不可用30秒。
upstream backend {
server backend1.example.com;
server backend2.example.com max_fails=3 fail_timeout=30s;
}
https
HTTPS 协议是由HTTP 加上TLS/SSL 协议构建的可进行加密传输、身份认证的网络协议,主要通过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护。
- 生成证书
openssl genrsa -des3 -out server.key 2048
openssl req -new -key server.key -out server.csr
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
- ssl 配置
server {
listen 443 ssl;
server_name ruoyi.https;
ssl_certificate /home/ssl/server.crt;
ssl_certificate_key /home/ssl/server.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_password_file /home/ssl/cert.pass; # 密码
location / {
proxy_pass http://localhost:8088;
}
}
参考资料
免责声明:
本站提供的资源,都来自网络,版权争议与本站无关,所有内容及软件的文章仅限用于学习和研究目的。不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负,我们不保证内容的长久可用性,通过使用本站内容随之而来的风险与本站无关,您必须在下载后的24个小时之内,从您的电脑/手机中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。侵删请致信