码迷,mamicode.com
首页 > 其他好文 > 详细

## nginx 使用

时间:2020-01-15 19:50:25      阅读:64      评论:0      收藏:0      [点我收藏+]

标签:dev   ati   tool   add   res   服务   用户   解决   自动   

nginx 使用

一、概述

有一个域名,有一台服务器,有多个服务。
为了可以通过域名来访问 服务器上的不同服务,而不将端口 对外 暴露。 采用 nginx 来进行 转发。

二、nginx 安装

不同的操作系统上,需要安装不同的包。
这里以在 centos6.5 上安装为例。
官网下载 最新的稳定包。 官网提供的包 需要自行进行 编译。
我想要将第三方包放在 当前我指定的目录下,比如 ~/share

Nginx 安装步骤

系统平台:CentOS release 6.6 (Final) 64位。

  • 1 安装编译工具及库文件
yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel
  • 2 要安装 PCRE
    PCRE 作用是让 Nginx 支持 Rewrite 功能。
# 1、下载 PCRE 安装包
[root@master ~]# cd ~/share
$ wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz

# 2、解压安装包:
[root@master share]# tar zxvf pcre-8.35.tar.gz

# 3、进入安装包目录
[root@master share]# cd pcre-8.35

# 4、编译安装 
[root@master pcre-8.35]# ./configure
[root@master pcre-8.35]# make && make install

# 5、查看pcre版本
[root@master pcre-8.35]# pcre-config --version
  • 3 安装 Nginx
# 1、下载 Nginx,下载地址:http://nginx.org/download/nginx-1.16.1.tar.gz
[root@master share]# cd ~/share
[root@master share]# wget http://nginx.org/download/nginx-1.16.1.tar.gz

# 2、解压安装包
[root@master share]# tar zxvf nginx-1.16.1.tar.gz

# 3、进入安装包目录
[root@master share]# cd 1.16.1

# 4、编译安装
[root@master nginx-1.16.1]# ./configure --prefix=/root/share/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/root/share/pcre-8.35
[root@master nginx-1.16.1]# make
[root@master nginx-1.16.1]# make install

# 5、查看nginx版本
[root@bogon nginx-1.16.1]# /root/share/nginx/sbin/nginx -v
# 到此,nginx安装完成。

你将会发现 产生了一个 /root/share/nginx 目录,这就是编译后的nginx 运行包,如果你还有其他同类机器需要安装 nginx,你只需要将此文件夹,移植到其他机器即可。
注意 需要设置 环境变量

  • 4 编写启停脚本

    为了运行nginx 的方便,可以来编写 nginx.sh 脚本来控制它的启动停止
    为了nginx 能自动重启,可以配置 nginx.service 放在 /lib/systemd/system/ 目录下

# nignx.service 的内容
[Unit]
Description=nginx
After=network.target

[Service]
Type=forking
ExecStart=/root/share/nginx/sbin/nginx.sh start
ExecReload=/root/share/nginx/sbin/nginx.sh restart
ExecStop=/root/share/nginx/sbin/nginx.sh stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target

详情参考:http://www.seekl.net/

三、nginx 配置

1. Nginx同一个域名配置多个项目

使用nginx 在同一域名在 配置多个项目 有两种方式:

    1. nginx 按不同的目录发给不同的项目
    1. 启用 二级域名,不同的项目分片不同的域名

      2.1 nginx 按不同的目录发给不同的项目
server {
    listen    80;
    server_name example.com;

    location ^~ /project1 {
        proxy_pass     http://localhost:8081;
        proxy_set_header  Host       $host;
        proxy_set_header  X-Real-IP    $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location ^~ /project2 {
        proxy_pass     http://localhost:8082;
        proxy_set_header  Host       $host;
        proxy_set_header  X-Real-IP    $remote_addr;
        proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location / {
       proxy_pass     http://localhost:8080;
       proxy_set_header  Host       $host;
       proxy_set_header  X-Real-IP    $remote_addr;
       proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

这里配置了三个项目:

http://example.com/project1路径分发到http://localhost:8081
http://example.com/project2路径分发到http://localhost:8082
其他路径分发到http://localhost:8080

2.2 启用 二级域名,不同的项目分片不同的域名
server {
    listen    80;
    server_name example.com;
    location / {
       proxy_pass     http://localhost:8080;
       proxy_set_header  Host       $host;
       proxy_set_header  X-Real-IP    $remote_addr;
       proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
# project1

server {
    listen    80;
    server_name project1.example.com;
    location / {
       proxy_pass     http://localhost:8081;
       proxy_set_header  Host       $host;
       proxy_set_header  X-Real-IP    $remote_addr;
       proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
# project2

server {
    listen    80;
    server_name project2.example.com;
    location / {
       proxy_pass     http://localhost:8082;
       proxy_set_header  Host       $host;
       proxy_set_header  X-Real-IP    $remote_addr;
       proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
注意:这三个项目属于不同的域名,项目之间通过http访问会存在跨域问题。
2.3 编写实际配置

根据我们的项目实际情况分析,应 采用 不同域名来访问

# 编写 nginx.conf 的配置,将其中引入多个配置文件
include vhost/*.conf;

四、nginx 常用命令

nginx -t   # 校验配置文件的正确性
nginx                      # 启动nginx
nginx -s reload            # 重新载入配置文件
nginx -s reopen            # 重启 Nginx
nginx -s stop              # 停止 Nginx

五、nginx 安全

5.1 nginx 的跨域访问

当浏览器发起ajax请求到其他域名时,会出现跨域的问题,在nginx上的解决方案是配置Access-Control-Allow-Origin来解决,此参数只允许配置单个域名或者*,当我们需要允许多个域名跨域访问时却不好配置,可以用map来实现

map $http_origin $corsHost {
    default 0;
    "~http://blog.panpanie.com" http://blog.panpanie.com;
    "~http://admin.panpanie.com" http://doc.panpanie.com;
    "~http://www.panpanie.com" http://www.panpanie.com;
}
server
{
    listen 80;
    server_name search.panpanie.com;
    root /nginx;
    location /
    {
        add_header Access-Control-Allow-Origin $corsHost;
    }
}

5.2 打开日志发现报错Permission denied

    1. 启动用户与nginx 工作用户不一致
[root@master nginx]# ps -ef | grep nginx
root     25604     1  0 17:32 ?        00:00:00 nginx: master process /root/share/nginx/sbin/nginx -p /root/share/nginx -c ./conf/nginx.conf
nobody   25605 25604  0 17:32 ?        00:00:00 nginx: worker process
root     25743  7036  0 17:32 pts/1    00:00:00 grep --color=auto nginx
    1. 修改 conf/nginx.conf 的user改为和启动用户一致
# vi conf/nginx.conf
user root
# 保存 :x

5.3 nignx 配置 valid_referer

为了配置一定的安全策略,将不允许 来自某些 域名的访问
valid_referers none blocked server_names *.panpanie.com;
if ($invalid_referer) {
rewrite ^/ http://www.panpanie.com/ redirect ;
}

## nginx 使用

标签:dev   ati   tool   add   res   服务   用户   解决   自动   

原文地址:https://www.cnblogs.com/panie2015/p/12198240.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!