NginxNginx 常用的基础配置

Posted Sun Peng

tags:

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

文章目录


一、基础配置

user                            root;
worker_processes                1;

events 
  worker_connections            10240;


http 
  log_format                    '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"';
  include                       mime.types;
  default_type                  application/octet-stream;
  sendfile                      on;
  #autoindex                    on;
  #autoindex_exact_size         off;
  autoindex_localtime           on;
  keepalive_timeout             65;
  gzip                          on;
  gzip_disable                  "msie6";
  gzip_min_length               100;
  gzip_buffers                  4 16k;
  gzip_comp_level               1;
  gzip_types                  text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
  gzip_types                    "*";
  gzip_vary                     off;
  server_tokens                 off;
  client_max_body_size          200m;

  server 
    listen                      80 default_server;
    server_name                 _;
    return                      403 /www/403/index.html;
  

  include                       ../serve/*.conf;

二、隐藏 nginx 版本信息

http 
  server_tokens         off;

三、禁止ip直接访问80端口

server 
  listen                80 default;
  server_name           _;
  return                500;

四、启动 web 服务 (vue 项目为例)

server 
  # 项目启动端口
  listen            80;
  # 域名(localhost)
  server_name       _;
  # 禁止 iframe 嵌套
  add_header        X-Frame-Options SAMEORIGIN;
  
  # 访问地址 根路径配置
  location / 
    # 项目目录
    root 	    html;
    # 默认读取文件
    index           index.html;
    # 配置 history 模式的刷新空白
    try_files       $uri $uri/ /index.html;
  
  
  # 后缀匹配,解决静态资源找不到问题
  location ~* \\.(gif|jpg|jpeg|png|css|js|ico)$  
    root           html/static/;
  
  
  # 图片防盗链
  location ~/static/.*\\.(jpg|jpeg|png|gif|webp)$ 
    root              html;
    valid_referers    *.deeruby.com;
    if ($invalid_referer) 
      return          403;
    
  
  
  # 访问限制
  location /static 
    root               html;
    # allow 允许
    allow              39.xxx.xxx.xxx;
    # deny  拒绝
    deny               all;
  

五、PC端和移动端使用不同的项目文件映射

server 
  ......
  location / 
    root /home/static/pc;
    if ($http_user_agent ~* '(mobile|android|iphone|ipad|phone)') 
      root /home/static/mobile;
    
    index index.html;
  

六、一个web服务,配置多个项目 (location 匹配路由区别)

server 
  listen                80;
  server_name           _;
  
  # 主应用
  location / 
    root          html/main;
    index               index.html;
    try_files           $uri $uri/ /index.html;
  
  
  # 子应用一
  location ^~ /store/ 
    proxy_pass          http://localhost:8001;
    proxy_redirect      off;
    proxy_set_header    Host $host;
    proxy_set_header    X-Real-IP $remote_addr;
    proxy_set_header    X-Forwarded-For
    proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
  
  
  # 子应用二
  location ^~ /school/ 
    proxy_pass          http://localhost:8002;
    proxy_redirect      off;
    proxy_set_header    Host $host;
    proxy_set_header    X-Real-IP $remote_addr;
    proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
  
  
  # 静态资源读取不到问题处理
  rewrite ^/api/profile/(.*)$ /(替换成正确路径的文件的上一层目录)/$1 last;


# 子应用一服务
server 
  listen                8001;
  server_name           _;
  location / 
    root          html/store;
    index               index.html;
    try_files           $uri $uri/ /index.html;
  
  
  location ^~ /store/ 
    alias               html/store/;
    index               index.html index.htm;
    try_files           $uri /store/index.html;
  
  
  # 接口代理
  location  /api 
    proxy_pass          http://localhost:8089;
  


# 子应用二服务
server 
  listen                8002;
  server_name           _;
  location / 
    root          html/school;
    index               index.html;
    try_files           $uri $uri/ /index.html;
  
  
  location ^~ /school/ 
    alias               html/school/;
    index               index.html index.htm;
    try_files           $uri /school/index.html;
  
  
  # 接口代理
  location  /api 
    proxy_pass          http://localhost:10010;
  

七、配置负载均衡

upstream my_upstream 
  server                http://localhost:9001;
  server                http://localhost:9002;
  server                http://localhost:9003;


server 
  listen                9000;
  server_name           test.com;

  location / 
    proxy_pass          my_upstream;
    proxy_set_header    Host $proxy_host;
    proxy_set_header    X-Real-IP $remote_addr;
    proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
  

八、SSL 配置 HTTPS

server 
  listen                      80;
  server_name                 www.xxx.com;
  # 将 http 重定向转移到 https
  return 301 https://$server_name$request_uri;


server 
  listen                      443 ssl;
  server_name                 www.xxx.com;
  ssl_certificate             /etc/nginx/ssl/www.xxx.com.pem;
  ssl_certificate_key         /etc/nginx/ssl/www.xxx.com.key;
  ssl_session_timeout         10m;
  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 / 
    root                    /project/xxx;
    index                   index.html index.htm index.md;
    try_files               $uri $uri/ /index.html;
  

NginxNginx基础操作

文章目录

一、Nginx概述

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。

其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

Nginx 是一个很强大的高性能Web和反向代理服务,它具有很多非常优越的特性:

在连接高并发的情况下,Nginx是Apache服务不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应,感谢Nginx为我们选择了 epoll and kqueue作为开发模型。

二、Nginx目录简介

  • /usr/sbin/nginx Nginx的命令程序
  • /etc/nginx/nginx.conf Nginx配置文件
  • /var/log/nginx Nginx日志文件
  • /usr/share/nginx/ Nginx默认虚拟主机目录

三、Nginx常用命令

命令描述
sudo nginx启动Nginx
sudo nginx -s stop[quit]停止Nginx
sudo nginx -s reload重启Nginx
sudo nginx -c /etc/nginx/nginx.conf加载指定配置文件启动
sudo nginx -v查看Nginx版本号

四、Nginx配置文件

4.1 nginx.conf

nginx.conf为Nginx的主要配置文件,其中包含全局配置、工作模式和HTTP配置等信息。以下为该文件的默认配置

# Nginx运行时用户名称
user  nginx;

# 工作进程数量,根据CPU的核心数来设置
worker_processes  auto;

# 异常日志保存路径以及日志等级
error_log  /var/log/nginx/error.log notice;
# PID文件位置
pid        /var/run/nginx.pid;

# 工作模式配置
events 
    # 单个进程运行时最大连接数
    worker_connections  1024;


# HTTP配置
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函数来输出文件
    sendfile        on;
    #tcp_nopush     on;

    # 连接超时时间(单位s)
    keepalive_timeout  65;

    # 是否开启gzip压缩
    #gzip  on;

    # 引入外部配置文件,包含虚拟主机信息
    include /etc/nginx/conf.d/*.conf;


4.2 default.conf

default.conf为虚拟主机的配置文件

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;
    

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    # 访问异常页面显示
    error_page   500 502 503 504  /50x.html;
    # 配置错误页面位置及页面
    location = /50x.html 
        root   /usr/share/nginx/html;
    

如果需要配置多个项目,可以创建不同的*.conf文件,配置对应的项目

五、部署项目

Nginx的优势在于可以创建不同的虚拟主机,从而运行多个项目。例如我们在主机的主目录上创建两个不同的项目淘宝和京东商城。

此时我们在Nginx的配置目录下创建对应的配置文件:

jd.conf

server 
    listen       80;
    server_name  www.jd.test.com;

    location / 
        root   /home/dogh/software/nginx/jd;
        index  index.html index.htm;
    

taobao.conf

server 
    listen       80;
    server_name  www.taobao.test.com;

    location / 
        root   /home/dogh/software/nginx/taobao;
        index  index.html index.htm;
    

创建对应的首页并重启Nginx。由于两个程序在同一个物理机上,所以采用使用不同的域名的方式来分别进行访问,此时需要配置访问主机的hosts文件使其能够正常解析域名。

六、动静分离

使用Tomcat加载静态资源时普遍效率不高,会影响Web响应慢,并且占用系统资源。此时可以使用Nginx去加载静态资源文件,将动态请求依旧交给Tomcat去处理。

6.1 加载静态资源

编辑配置文件,指定静态资源的本地路径

# 使用通配符指定需要加载的文件类型
location ~ .*\\.(js|css|ico|png|jpg|eot|svg|ttf|woff) 
    root /home/dogh/software/static;

将项目中静态资源放到该目录中,重启Nginx

6.2 图片服务器应用

在实际应用中,对于项目运行过程中产生的文件资源会存放在单独的服务器中,所以需要访问的时候就需要通过HTTP协议访问文件服务器上的资源。此时Nginx就能够很好的实现这一功能。

  1. 通过FTP上传图片至指定目录
  2. 修改default.conf文件,添加文件访问的路由
     # 设置访问路由
     location /images 
         # 设置图片存储位置(图片位置为root地址加路由地址)
         root    /home/dogh/software/nginx;
         # 是否开启文件目录,可供用户查询所有文件
         autoindex    on;
     
    
  3. 重启Nginx服务

此时就可以通过HTTP协议直接访问主机的图片

需要注意访问权限问题,在Nginx的主配置文件中,Nginx的运行使用的是nginx用户,若文件并不是通过Nginx程序上传,会由于用户不同导致访问权限受限,则需要提升文件的权限或者修改Nginx的运行用户

方法一:

cd ~/software/images

# 提升文件权限,使其他用户也可访问
chmod 604 image.jpg

方法二:

修改nginx.conf中第一行use nginx修改为use root提升Nginx运行权限,保存后重启Nginx后即可。

若不修改文件权限或Nginx运行权限,在访问图片时就会报403无法访问的错误

七、反向代理

7.1 正向代理与反向代理

7.1.1 正向代理

正向代理是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。

正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。正向代理还可以使用缓冲特性(由mod_cache提供)减少网络使用率。

使用ProxyRequests指令即可激活正向代理。因为正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此你必须采取安全措施以确保仅为经过授权的客户端提供服务。

7.1.2 反向代理

反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。

7.1.3 区分

  • 正向代理主要面对的是客户端,负责接收不同客户端的请求转发给服务端;而反向代理是面对服务端,负责将请求分发给集群。
  • 正向代理主要保护的客户端的信息安全,隐藏客户端信息;而反向代理主要保护服务端信息安全,避免服务端被攻击。

7.2 使用Nginx搭建代理服务器

7.2.1 创建配置文件

# 复制一个新的配置文件
sudo cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/proxy.conf

7.2.2 添加代理

修改proxy.conf添加代理服务器

# 定义Tomcat集群
upstream tomcatserver 
    server 192.168.124.21:8080;


server 
    listen       80;
    server_name  www.tomcat.com;

    location / 
        # 指定代理地址,注意要使用HTTP协议
        proxy_pass http://tomcatserver;
    


若需要代理多个服务端,则在upstream中追加server即可并指定IP

注意代理集群名称(upstream)不能出现特殊字符

7.3 负载均衡

项目通过反向代理,可以使用Nginx代理多个服务器,因此就会涉及到请求最终会发送给哪个服务端去处理的问题。

Nginx默认使用轮询的方式进行请求,及请求完1号服务器,第二条请求去请求2号服务器依次类推。也可以为每个服务器设置权重,增加获取请求的概率。

7.3.1 负载均衡策略

  1. 轮询
    Nginx的默认负载均衡策略,按照请求顺序你一个,我一个。
    示例:
     upstream tomcatserver 
         server 192.168.124.21:8080;
         server 192.168.124.22:8080;
     
    
  2. 权重
    增加服务端获得请求的概率,在每个server的代理服务后加上weight=1,权重越大获得请求就越多。
    示例:
     upstream tomcatserver 
         server 192.168.124.21:8080 weight=100;
         server 192.168.124.22:8080 weight=200;
     
    
  3. IP绑定ip_hash
    每个请求发送到服务端后进行绑定,这样为每个访客固定一个服务端,可以解决Session的问题。
    示例:
     upstream tomcatserver 
         ip_hash;
         server 192.168.124.21:8080;
         server 192.168.124.22:8080;
     
    
  4. fair
    根据各个服务端的响应时间分配请求,响应时间短的优先分配。
    示例:
     upstream tomcatserver 
         server 192.168.124.21:8080;
         server 192.168.124.22:8080;
         fair;
     
    
  5. url_hash
    按访问url的hash结果分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
     upstream tomcatserver 
         server 192.168.124.21:8080;
         server 192.168.124.22:8080;
         hash $request_uri; 
         hash_method crc32; 
     
    

八、高并发

  • 负载均衡:使用服务集群处理
  • 动静分离:使用Nginx、CDN搭建静态资源服务器
  • 缓存:以空间换时间,提高系统效率
  • 限流:对访问流量进行控制
  • 降级:对其他非必要业务进行服务降载

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

NginxNginx基础操作

NginxNginx基础操作

NginxNginx基础操作

Nginx 的常用命令

Nginx入门基础篇

nginx常用指令