nginx配置和使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/loy_184548/article/details/81939061

nginx配置和使用

参考文章:here

0. 一些基本命令

// 启动
/usr/local/nginx/sbin/nginx
// 停止
kill 
// 查看配置是否正确
/usr/local/nginx/sbin/nginx -t

1. 安装

依赖库:

$ yum install gcc-c++
$ yum install pcre pcre-devel
$ yum install zlib zlib-devel
$ yum install openssl openssl--devel

安装nginx:

 // 下载
 wget http://nginx.org/download/nginx-1.13.8.tar.gz
 // 解压
 tar -xvzf nginx-1.13.8.tar.gz
 // 进入安装包目录
 cd nginx-1.13.8
 // 编译安装
 ./configure
 make && make install

2. 启动

命令:/usr/local/nginx/sbin/nginx

效果:在浏览器输入 http://ip/,就能看到nginx搭建的服务器,”Welcome to nginx!”

3. 配置文件

文件目录:/nginx/nginx.conf

3. 配置文件

可以通过where nginx 查看
文件目录:/usr/local/etc/nginx/nginx.conf

a. 全局块

配置影响nginx全局的指令

#配置用户或者组,默认为nobody, 所有用户具有启停权限
user  nobody;
# 允许生成的进程数,默认为1
worker_processes  1; 

#制定日志路径,级别
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#指定nginx进程运行文件存放地址,必须包含文件名称
#pid        logs/nginx.pid;

b. events块

配置影响nginx服务器或与用户的网络连接

events {
    #最大连接数,默认为512
    worker_connections  1024;
}

c. http块

配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置

  • http块: 可以嵌套多个server
  • server块: 配置虚拟主机的相关参数, 自定义端口和映射本地网络路径
  • location块: 配置请求的路由,以及各种页面的处理情况
http {
    #http全局块
    include       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  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    #server块,配置文件引入 -> 在proxy/下存放不同项目的配置文件
    include /opt/proxy/*.conf;
}

server块配置:

server {
    # 配置HTTP服务器监听的端口号
    listen    80;
    server_name   localhost;
    charset utf-8,gbk;

    location / {
        # 本地网站文件夹路径
        root /opt/web;
        try_files $uri /index.html;
        autoindex on;
        autoindex_exact_size on;
        autoindex_localtime on;
    }

    location /v1/ {
        #后端服务地址, 服务程序会自动进行代理转发
        proxy_pass http://127.0.0.1:7000/api/v1/;
    }
}

如果监听端口80,server_name有多个的情况:

server {
    listen    80;
    server_name   *.hello.cn;

    # ~*:与指定正则表达式模式匹配时返回"真",判断匹配与否时不区分字符大小写;
    if ($http_host ~* "^(.*?)\.hello\.cn$") {
        set $domain $1;
    }

    location / {

        if ($domain ~* "www") {
           proxy_pass http://127.0.0.1:5000;
        }

        if ($domain ~* "a") {
           proxy_pass http://127.0.0.1:5100;
        }

        tcp_nodelay     on;
        proxy_set_header Host            $host;
        proxy_set_header X-Real-IP       $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        root   html;  
        index  index.html index.htm; 
    }
}

问题:nginx使用proxy_pass反向代理时cookie丢失

解决办法:配置后端服务地址时,加上 proxy_cookie_path

location /v1/ {
    #后端服务地址, 服务程序会自动进行代理转发
    proxy_pass http://127.0.0.1:5000/api/v1/;
    # 处理cookie问题
    proxy_cookie_path /api/;
}

猜你喜欢

转载自blog.csdn.net/loy_184548/article/details/81939061