Nginx基础

Posted fuzy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx基础相关的知识,希望对你有一定的参考价值。


nginx

中文文档

1、nginx介绍

    nginx是什么?一个反向代理服务器,代理的是服务端,主要用来分发请求。nginx是静态web服务器(存储静态资源),一般用来与tomcat搭配使用。例如:当业务处理量较大时,一台tomcat不足以支撑需求,这时候需要部署多台tomcat实例,nginx就可以把请求分发到各个不同的实例进行处理。

2、nginx安装

  • 安装gcc

    查看gcc版本,如果没有则执行 yum-y install gcc

  • 安装pcre、pcre-devel(perl库,包括perl兼容的二次开发库)

    yum install-y pcre pcre-devel


  • zlib安装(zlib库提供了很多种压缩和解压缩方式)

    yum install-y zlib zlib-devel

  • openssl安装

    yum install-y openssl openssl-devel

  • 获取nginx

    wget http://nginx.org/download/nginx-1.17.9.tar.gzcd usr/local

  • 解压

    tar-zxvf nginx-1.17.9.tar.gz-C/usr/local/nginx

  • 安装nginx

    • ./configure

    • make&&make install

  • 启动nginx

    sbin/nginx

  • 关闭nginx

    ./nginx-s stop


  • 修改配置重新加载

    sbin/nginx-s reload

注意:可能由于防火墙导致访问失败,可执行以下命令开放端口

/sbin/iptables-I INPUT-p tcp--dport80-j ACCEPT

3、nginx配置文件

 
   
   
 
  1. #user nobody;

  2. worker_processes 1;

  3. #error_log logs/error.log;

  4. #error_log logs/error.log notice;

  5. #error_log logs/error.log info;

  6. #pid logs/nginx.pid;

  7. events {

  8. worker_connections 1024;

  9. }



  10. http {

  11. include mime.types;

  12. default_type application/octet-stream;

  13. sendfile on;

  14. #tcp_nopush on;


  15. #keepalive_timeout 0;

  16. keepalive_timeout 65;


  17. #gzip on;


  18. server {

  19. listen 80;

  20. server_name localhost;


  21. #charset koi8-r;


  22. #access_log logs/host.access.log main;


  23. location / {

  24. root html;

  25. index index.html index.htm;

  26. }

  27. error_page 500 502 503 504 /50x.html;

  28. location = /50x.html {

  29. root html;

  30. }

  31. }

  32. }

Main(全局设置)


 
   
   
 
  1. #主模块指令,指定Nginx Worker进程运行用户及用户组,默认nobody账号

  2. user nobody;

  3. #指定了Nginx要开启的进程数。

  4. worker_processes 1;

  5. #日志配置

  6. error_log logs/error.log;

  7. error_log logs/error.log notice;

  8. error_log logs/error.log info;

  9. #主模块指令,用来指定进程pid的存储文件位置

  10. pid logs/nginx.pid;

  11. #events事件指令是设定Nginx的工作模式及连接数上限

  12. events {

  13. #定义Nginx每个进程的最大连接数 默认1024

  14. worker_connections 1024;

  15. }

HTTP模块(核心模块)


 
   
   
 
  1. http {

  2. #指定配置文件

  3. include mime.types;

  4. #定义文件类型

  5. default_type application/octet-stream;

  6. sendfile on;

  7. #tcp_nopush on;


  8. #客户端连接保持活动的超时时间

  9. keepalive_timeout 65;

  10. #可配置多个

  11. server {

  12. #监听端口

  13. listen 80;

  14. server_name localhost;

  15. #指定虚拟主机的访问日志存放路径

  16. access_log logs/host.access.log main;

  17. #通用匹配 找到html文件夹下的index.html或者index.htm文件

  18. location / {

  19. root html;

  20. index index.html index.htm;

  21. }

  22. #错误页面匹配

  23. error_page 500 502 503 504 /50x.html;

  24. location = /50x.html {

  25. root html;

  26. }

  27. }

Location URL匹配配置

配置语法

location[=|~*|^~]/uri/{...}

配置规则
  • location = /uri 精准匹配

  • location ^~ /uri 前缀匹配

  • location / 通用匹配

规则的优先级
 
   
   
 
  1. 1 location = /

  2. 2 location = /index

  3. 3 location ^~ /article/

  4. 4 location ^~ /article/files/

  5. 5 location ~ \.(gif|png|js|css)$

  6. 6 location /


  7. http://192.168.11.154/

  8. http://192.168.11.154/index ->2

  9. http://192.168.11.154/article/files/1.txt ->4

  10. http://192.168.11.154/mic.png ->5

配置实例

eg1:

 
   
   
 
  1. #符合扩展名的静态文件都交给nginx处理

  2. location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {


  3. }

eg2:

 
   
   
 
  1. #将upalod和html下的文件都交给nginx处理

  2. location ~ ^/(upload|html)/ {


  3. }

eg3:

 
   
   
 
  1. #将所有动态资源jsp为后缀的文件都交给端口号8080去处理

  2. location ~ .*.php$ {

  3. index index.php;

  4. proxy_pass http://localhost:8080;

  5. }

eg4:

 
   
   
 
  1. server {

  2. listen 80;

  3. server_name localhost;

  4. location / {

  5. proxy_pass http://192.168.11.161:8080;

  6. #proxy_set_header Host $host;

  7. #proxy_set_header X-Real-IP $remote_addr;

  8. # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

  9. }

  10. }

4、nginx负载均衡配置

 
   
   
 
  1. http {

  2. #负载均衡upstream

  3. upstream myproject {

  4. #upstream后端失败了指定次数(max_fails)后,在fail_timeout时间内不再去请求它 weight权重配置

  5. server 127.0.0.1:8000 weight=1 max_fails=2 fail_timeout=600s;

  6. server 127.0.0.1:8001;

  7. server 127.0.0.1:8002;

  8. server 127.0.0.1:8003;

  9. }


  10. server {

  11. listen 80;

  12. server_name www.domain.com;

  13. location / {

  14. proxy_pass http://myproject;

  15. }

  16. }

  17. }

5、nginx缓存配置

 
   
   
 
  1. #格式:expires 30s|m|h|d

  2. location ~ .*.(jpg|jpeg|gif|bmp|png|js|css|ico)$ {

  3. root static;

  4. expires 1d;

  5. }

6、防盗链

 
   
   
 
  1. location ~* \.(gif|jpg|png|swf|flv)$ {

  2. root html

  3. #“Referer”请求头为指定值时,内嵌变量$invalid_referer被设置为空字符串,否则这个变量会被置成“1”。查找匹配时不区分大小写,其中none表示缺少referer请求头、blocked表示请求头存在,但是它的值被防火墙或者代理服务器删除、server_names表示referer请求头包含指定的虚拟主机名

  4. #语法: valid_referers none | blocked | server_names | string ...;

  5. valid_referers none blocked *.nginxcn.com;

  6. if ($invalid_referer) {

  7. rewrite ^/ www.nginx.cn

  8. return 404;

  9. }

  10. }

    需要注意的是伪造一个有效的“Referer”请求头是相当容易的,因此这个模块的预期目的不在于彻底地阻止这些非法请求,而 是为了阻止由正常浏览器发出的大规模此类请求。还有一点需要注意,即使正常浏览器发送的合法请求,也可能没 有“Referer”请求头。

7、跨域访问

    跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略( 是指协议,域名,端口都要相同,其中有一个不同都会产生跨域)造成的,是浏览器对javascript实施的安全限制。

 
   
   
 
  1. server{

  2. listen 80;

  3. server_name localhost;

  4. location / {

  5. proxy_pass http://192.168.11.154:8080;

  6. proxy_set_header Host $host;

  7. proxy_set_header X-Real-IP $remote_addr;

  8. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

  9. proxy_send_timeout 60s;

  10. proxy_read_timeout 60s;

  11. proxy_connect_timeout 60s;

  12. add_header 'Access-Control-Allow-Methods' 'GET,PUT,POST,DELETE,OPTIONS'; //支持的

  13. 请求方式

  14. add_header 'Access-Control-Allow-Header' 'Content-Type,*'; //支持的媒体类型

  15. }

  16. location ~ .*\.(gif|jpg|ico|png|css|svg|js)$ {

  17. root static;

  18. }

  19. }

以上是关于Nginx基础的主要内容,如果未能解决你的问题,请参考以下文章

nginx.conf 忽略了 nginx-ingress 配置映射片段

将 nginx rtmp 片段发送到 WebRTC

text 有用的nginx命令和片段

[Go] 通过 17 个简短代码片段,切底弄懂 channel 基础

linux学习:Nginx--常见功能配置片段与优化-06

201555332盛照宗—网络对抗实验1—逆向与bof基础