43510


**[リンク先内容](https://ja.stackoverflow.com/questions/43466/centos7-%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E7%B5%8C%E7%94%B1%E3%81%A7%E3%81%AEuwsgi%E8%B5%B7%E5%8B%95%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)で、uWSGIを複数起動して、異なる結果を表示させたいのですが**  
・実行すると、画面には同じ結果が表示されます…

* * *

**ファイル構成**  
/var/www/中略/emperor/  
┗emperor.ini

/var/www/中略/hoge/  
┣hoge.ini  
┣hoge.py  
┣hoge2.ini  
┗hoge2.py

* * *

**/etc/systemd/system/uwsgi.service**

[code]

    [Unit]
    Description=uWSGI Emperor
    After=syslog.target
    
    [Service]
    ExecStart=/usr/bin/uwsgi --emperor /var/www/中略/emperor/emperor --uid nginx --gid nginx
    RuntimeDirectory=/var/run/uwsgi/app
    Restart=always
    KillSignal=SIGQUIT
    Type=notify
    StandardError=syslog
    NotifyAccess=all
    
    [Install]
    WantedBy=multi-user.target
    
[/code]

* * *

**/var/www/中略/emperor/emperor.ini**

[code]

    [uwsgi]
    emperor = /var/www/中略/hoge
    uid = nginx
    gid = nginx
    
[/code]

* * *

**/var/www/中略/hoge/hoge2.ini**

[code]

    [uwsgi]
    uid = nginx
    gid = nginx
    socket = /var/run/uwsgi/app/app.sock
    chmod-socket = 777
    chdir = /var/www/中略/hoge/
    callable = application2
    wsgi-file = /var/www/中略/hoge/hoge2.py
    
[/code]

* * *

**/var/www/中略/hoge/hoge2.py**

[code]

    def application2(environ, start_response):
        start_response('200 OK', [('Content-type', 'text/html')])
        return b'<html><body>Hello, world2</body></html>'
    
[/code]

* * *

**実行すると**

[code]

    # systemctl restart uwsgi
    
    # systemctl restart nginx.service
    
[/code]

・「hoge.py」「hoge2.py」へアクセスしても同じ結果「Hello, world」がWeb画面表示されます  
・再起動した場合、両方共「Hello, world2」と表示されることもあります

[code]

    # systemctl status uwsgi.service
    
    ● uwsgi.service - uWSGI Emperor
       Loaded: loaded (/etc/systemd/system/uwsgi.service; disabled; vendor preset: disabled)
       Active: active (running) since 日付
     Main PID: 4706 (uwsgi)
       Status: "The Emperor is governing 1 vassals"
       CGroup: /system.slice/uwsgi.service
               ├─4706 /usr/bin/uwsgi --emperor /var/www/中略/emperor --uid nginx --gid nginx
               ├─4707 /usr/bin/uwsgi --ini emperor.ini
               ├─4708 /usr/bin/uwsgi --ini emperor.ini
               ├─4709 /usr/bin/uwsgi --ini hoge.ini
               ├─4710 /usr/bin/uwsgi --ini hoge2.ini
               ├─4711 /usr/bin/uwsgi --ini hoge.ini
               ├─4712 /usr/bin/uwsgi --ini hoge.ini
               ├─4713 /usr/bin/uwsgi --ini hoge.ini
               ├─4714 /usr/bin/uwsgi --ini hoge.ini
               └─4716 /usr/bin/uwsgi --ini hoge2.ini
    
     日付 uwsgi[4706]: *** Python threads support is disabled. You can enable it with --enable-threads ***
     日付 uwsgi[4706]: Python main interpreter initialized at 0xcec370
     日付 uwsgi[4706]: your mercy for graceful operations on workers is 60 seconds
     日付 uwsgi[4706]: *** Operational MODE: no-workers ***
     日付 uwsgi[4706]: spawned uWSGI master process (pid: 4707)
     日付 uwsgi[4706]: 日付 - [emperor] vassal emperor.ini has been spawned
     日付 uwsgi[4706]: 日付 - [emperor] vassal hoge.ini has been spawned
     日付 uwsgi[4706]: 日付 - [emperor] vassal hoge2.ini has been spawned
     日付 uwsgi[4706]: 日付 - [emperor] vassal hoge.ini is ready to accept requests
     日付 uwsgi[4706]: 日付 - [emperor] vassal hoge2.ini is ready to accept requests
    
[/code]

* * *

**疑問点を追記しました**  
・下記で、◯◯.sockのファイル名が複数ある場合(例えば、hoge.sock,hoge2.sock,)、location内で複数指定することは可能でしょうか？

**現在のNginxconfファイル**

[code]

    server {
        listen       80;
        //中略
    
        location ~ \.py$ { {
            include uwsgi_params;
            uwsgi_pass unix:/var/run/uwsgi/app/app.sock;
        }
    
[/code]

**希望するNginxconfファイル**  
・hoge.sockでも、hoge2.sockでも動的対応するようにしたい  
・location段階で切り分けなければいけない？？  
・それとも、下記の(.+)部分が間違っているでしょうか？

[code]

        location ~ \.py$ { {
            include uwsgi_params;
            uwsgi_pass unix:/var/run/uwsgi/app/(.+).sock;
        }
    
[/code]


CC BY-SA 3.0
2018-04-23T08:14:28.313
43491
2018-05-19T09:38:52.190
2018-05-19T09:38:52.190
3060
7886
question
python centos nginx uwsgi
uWSGI Emperor について


ソケットが当たっているためです。ソケットは同じ名前にせず、例えば、hogex.iniを以下のよう修正にして、nginxの設定の方で、`/var/run/uwsgi/app/hoge1.sock`
と `/var/run/uwsgi/app/hoge2.sock`を区別して設定してください。

[code]

    [uwsgi]
    uid = nginx
    gid = nginx
    socket = /var/run/uwsgi/app/%n.sock
    以下略
    
[/code]

hoge,hoge2サーバの内容が同じで負荷分散させたい場合は、nginxのload balancerの機能が使えます。公式マニュアルは以下にあります。  
<http://nginx.org/en/docs/http/load_balancing.html>

その場合は、以下のような記述になると思われます。

[code]

    http {
        upstream myapp1 {
            uwsgi_pass unix:/var/run/uwsgi/app/hoge.sock;
            uwsgi_pass unix:/var/run/uwsgi/app/hoge2.sock;
        }
        server {
            listen 80;
            location ~ \.py$ { {
                include uwsgi_params;
                proxy_pass http://myapp1;
            }
        }
    }
    
[/code]


CC BY-SA 3.0
2018-04-24T04:34:40.547
43510
2018-04-24T11:52:46.953
2018-04-24T11:52:46.953
15171
15171
43491
answer