IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 网络服务之nginx详解 -> 正文阅读

[系统运维]网络服务之nginx详解

差异对比

APACHENGINX
配置繁琐配置相对简单
原生支持动态和静态页面支持静态页面
模块相对安全高性能模块出产迅速、社区活跃
BUG 相对较少,消耗资源较多BUG相对较多,节省资源
对加密支持较好对反向代理支持较好
同步阻塞型应用异步非阻塞型应用

Nginx 的安装

yum -y install gcc gcc-c++ lrzsz zlib zlib-devel pcre pcre-devel
?
tar -zxvf nginx-xxx
tar -zxvf openssl-xxx
?
./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module ?--with-openssl=/root/openssl-1.0.2h ?--with-stream && ?make  && ?make install
?
make && make install

Nginx 实验

1、模块启用

vi /usr/local/nginx/conf/nginx.conf
 ?  location /abc {
     ? ? ?  stub_status on;
 ?  } 

2、Nginx 访问控制列表(ACL)

  • 基于用户名密码的访问控制

    vi /usr/local/nginx/conf/nginx.conf
    ?
    location /abc {
     ?  stub_status on;
     ?  auth_basic "Welcome to nginx!";
     ?  auth_basic_user_file /usr/local/nginx/html/a.psd;
    }
    ?
    yum -y install httpd
    htpasswd -c /usr/local/nginx/html/a.psd zhangsan
    htpasswd -m /usr/local/nginx/html/a.psd lisi
  • 基于 IP 的访问控制

    vi /usr/local/nginx/conf/nginx.conf
    ?
    location /abc {
     ?  stub_status on;
     ?  auth_basic "Welcome to nginx!";
     ?  auth_basic_user_file /usr/local/nginx/html/a.psd;
     ?  allow 192.168.66.250; 允许250拒绝所有
     ?  deny 192.168.66.0/24;
    }

3、虚拟主机

在主配置文件中复制 server{} 区域, 不同的 server 区域则是不同的虚拟主机, 同 apache 拥有基于域名端口的虚拟主机

4、反向代理

location / {
 ?  proxy_pass http://192.168.1.3:80;
}

5、七层负载调度 - 基于 Apache

Nginx 负载区域构建

upstream atguigu.com {
 ?  ip_hash;
    server 192.168.1.240:80 weight 2;
    server 192.168.1.241:80 weight 1;
    server 192.168.1.242:80 weight 1 backup;
}
?
location / {
 ?  proxy_pass http://atguigu.com;
}

6、HTTPS 加密访问

openssl genrsa -des3 -out server.key 1024
openssl req -new -key server.key -out server.csr
cp server.key server.key.org
openssl x509 -req -days 365 -sha256 -in server.csr -signkey server.key -out servernew.crt 
cp servernew.crt /usr/local/nginx/conf/server.crt
cp server.key /usr/local/nginx/conf/server.key
ssl on;
ssl_certificate server.crt;
ssl_certificate_key server.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1;
ssl_ciphers HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM;
ssl_prefer_server_ciphers on;

7、地址跳转

server {
 ?  listen 80;
 ?  server_name www.hongfu.com;
 ?  rewrite ^(.*)$ https://$host$1 permanent;
}

8、Nginx 配置 HSTS

add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload;";

9、避免点击劫持,还要添加 X-Frame-Options 头部,确保不会嵌入到 frame 或 iframe,使得网站的内容不会嵌入到其他网站**

add_header X-Frame-Options "DENY";

10、HTTP 2.0 配置

server {
 ?  listen ? ? 443 ssl http2;
 ?  server_name  pan.rocblog.top;
?
 ?  ssl_certificate /usr/local/nginx/html/https/pan.pem;
 ?  ssl_certificate_key /usr/local/nginx/html/https/pan.key;
}
?
# http2.0 模板网站
https://http2.akamai.com/demo
?
# 检测网站是否开启 http2.0 协议
1:chrome浏览器:下载插件:HTTP/2 and SPDY indicator
2:firefox浏览器:下载插件:HTTP/2 and SPDY indicator 2.3

传递真实地址至后端服务器

1、前端 Nginx,后端 Tomcat

location / {
 ?  proxy_pass http://localhost:8080;
 ?  proxy_set_header X-Real-IP $remote_addr;
 ?  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 ?  proxy_set_header Host $http_host;
 ?  proxy_intercept_errors on;
}
 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
 ? ? ? ? ? ? ? prefix="access_log." suffix=".txt"
 ? ? ? ? ? ? ? pattern="Remote User[ %{X-Forwarded-For}i %l %u %t ] Request[ &quot;%r&quot; ] Status Code[ %s ] Bytes[ %b ] Referer[ &quot;%{Referer}i&quot; ] Agent[ &quot;%{User-agent}i&quot; ]" />

2、前端 Nginx,后端 Nginx

location / {
 ?  proxy_pass http://localhost:8000;
 ? ?# Forward the user's IP address to Rails
 ?  proxy_set_header X-Real-IP $remote_addr;
 ? ?# needed for HTTPS
 ? ?# proxy_set_header X_FORWARDED_PROTO https;
 ?  proxy_set_header X-Forwarded-For $remote_addr;
 ?  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 ?  proxy_set_header Host $host;
 ?  proxy_redirect off;
}
# 后端的 Nginx 需要安装一个 Module: NginxHttpRealIpModule,编译的时候默认不包含此 Module, –with-http_realip_module
location / {
 ?  proxy_pass http://localhost:8000;
 ?
 ? ?# Forward the user's IP address to Rails
 ?  proxy_set_header X-Real-IP $remote_addr;
 ? ?# needed for HTTPS
 ? ?# proxy_set_header X_FORWARDED_PROTO https;
 ?  proxy_set_header X-Forwarded-For $remote_addr;
 ?  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 ?  proxy_set_header Host $host;
 ?  proxy_redirect off;
 ? ?# NginxHttpRealIpModule
 ?  set_real_ip_from 192.168.1.0/24;
 ?  set_real_ip_from 192.168.2.1;
 ?  real_ip_header X-Real-IP;
}

3、前端 Nginx 后端 Apache

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# apache 端需要安装一个第三方模块"mod_rpaf"了, 官方网站: http://stderr.net/apache/rpaf/
wget https://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
tar zxvf mod_rpaf-0.6.tar.gz
cd mod_rpaf-0.6
sed -i 's/remote_addr/client_addr/' mod_rpaf-2.0.c
sed -i 's/remote_ip/client_ip/' mod_rpaf-2.0.c
/usr/local/apache2/bin/apxs ?-i -c -n mod_rpaf-2.0.slo mod_rpaf-2.0.c
vi  /usr/local/apache/conf/httpd.conf
 ?  Include conf/extra/httpd-rpaf.conf
 ? ?
vi /usr/local/apache/conf/extra/httpd-rpaf.conf
 ?  LoadModule rpaf_module ? ? ?  modules/mod_rpaf-2.0.so
 ?  RPAFenable On
 ?  RPAFsethostname On
 ?  RPAFproxy_ips 127.0.0.1 10.8.0.110
 ?  RPAFheader X-Forwarded-For

Nginx 缓存设置

说明

在 HTTP/1.0 协议中,Last-Modified 是控制缓存的一个非常重要的 HTTP 头。如果需要控制浏览器的缓存,服务器首先必须发送一个 以 UTC 时间为值的 Last-Modifeid 头,当第二次访问这个页面时,浏览器会发送一个 If-Modified-Since 头给服务器,让服务器判 断是否有必要更新内容,这个 If-Modified-Since 头的值就是上次访问页面时,浏览器发送的 Last-Modifeid 头的值

是否存在缺憾?

HTTP/1.1 协议用 Cache-Control 头解决了这个问题
?
# Cache-Control 响应头的语法为:
Cache-Control = “Cache-Control” “:”;
 ?  public
 ?  private
 ?  no-cache
 ?  no-store
 ?  must-revalidate
 ? ?max-age=时间
 ? ?
public:指示响应数据可以被任何客户端缓存
private:指示响应数据可以被非共享缓存所缓存。这表明响应的数据可以被发送请求的浏览器缓存,而不能被中介所缓存
no-cache:指示响应数据不能被任何接受响应的客户端所缓存
no-store:指示所传送的响应数据除了不能被缓存,也不能存入磁盘。一般用于敏感数据,以免数据被复制
must-revalidate:指示所有的缓存都必须重新验证
max-age:数据经过 max-age 设置的秒数后就会失效
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ {
 #禁止缓存,每次都从服务器请求
  add_header Cache-Control no-store;
 ?#expires ? 3d;
}
server {
  location ~* \.(html)$ {
 ?  access_log off;
 ? ?# 使用 Last-Modified。no-cache 会发起往返通信来验证缓存的响应,但如果资源未发生变化,则不会下载,返回304
 ?  add_header  Cache-Control ?max-age=no-cache;
  }
?
  location ~* \.(css|js|png|jpg|jpeg|gif|gz|svg|mp4|ogg|ogv|webm|htc|xml|woff)$ {
 ?  access_log off;
 ?  add_header ?  Cache-Control ?max-age=360000;
  }
}

反向代理会让缓存失效,可以进行如下设置

# Nginx 主配置文件
?
http {
  ...
  include nginx_proxy.conf;
  proxy_cache_path  /data/nuget-cache levels=1:2 keys_zone=nuget-cache:20m max_size=50g inactive=168h;
?
  server {
 ?  listen ? ? ? 80;
 ?  server_name  xxx.abc.com;
 ?  location / {
 ? ?  proxy_pass http://localhost:7878;
 ? ?  add_header  Cache-Control ?max-age=no-cache;
 ?  }
 ? ?
 ?  location ~* \.(css|js|png|jpg|jpeg|gif|gz|svg|mp4|ogg|ogv|webm|htc|xml|woff)$ {
 ? ?  access_log off;
 ? ?  add_header Cache-Control "public,max-age=30*24*3600";
 ? ?  proxy_pass http://localhost:7878;
 ?  }
  }
} 
?
# nginx_proxy.conf  配置文件
proxy_cache nuget-cache;
proxy_cache_valid 168h;
proxy_ignore_headers Set-Cookie Cache-Control;
proxy_hide_header Cache-Control;
proxy_hide_header Set-Cookie;

Nginx 开启压缩

gzip  on;
gzip_min_length  1k;
gzip_buffers ? ? 4 16k;
gzip_http_version 1.1;
gzip_comp_level 9;
gzip_types ? ? ? text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php application/javascript application/json;
gzip_disable "MSIE [1-6]\.";
gzip_vary on;
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-10-31 12:39:35  更:2022-10-31 12:40:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年9日历 -2024/9/19 10:10:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码