Hello Graham,

Sorry I missed the argument in Directory. I have now changed the configuration 
file as below. 

(env) hd2900@hd2900:~/Documents/Python/hd2900TakeawayPrint$ cat 
/etc/apache2/sites-enabled/000-default.conf 
<VirtualHost *:80>
        # The ServerName directive sets the request scheme, hostname and port 
that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        #ServerName www.example.com

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        WSGIDaemonProcess flaskapp threads=5
        WSGIScriptAlias / /var/www/html/flaskapp/flaskapp.wsgi
        WSGIApplicationGroup %{GLOBAL}

        <Directory /var/www/html/flaskapp>
             WSGIProcessGroup flaskapp
             Require all granted
        </Directory>

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf      
        #Header set Access-Control-Allow-Origin "*"
</VirtualHost>

Furthermore I have ensured that the dynamic link is created as seen below in 
the path /var/www/html

(env) hd2900@hd2900:/var/www/html$ ll
total 20
drwxr-xr-x 2 root root  4096 Oct 10 18:38 ./
drwxr-xr-x 3 root root  4096 Sep 26 21:54 ../
lrwxrwxrwx 1 root root    19 Oct 10 18:38 flaskapp -> hd2900TakeawayPrint
-rw-r--r-- 1 root root 10918 Sep 26 21:54 index.html

In the hd2900TakeawayPrint folder the flasapp.wsgi is located

(env) hd2900@hd2900:~/Documents/Python/hd2900TakeawayPrint$ ll -la
total 32
drwxrwxr-x 4 hd2900 www-data 4096 Oct 10 18:23 ./
drwxrwxr-x 3 hd2900 hd2900   4096 Oct 10 18:04 ../
drwxrwxr-x 4 hd2900 hd2900   4096 Oct 10 18:08 env/
-rwxrwxr-x 1 hd2900 www-data  249 Oct 10 18:23 flaskapp.py*
-rwxrwxr-x 1 hd2900 www-data   96 Oct 10 18:23 flaskapp.wsgi*
drwxrwxr-x 8 hd2900 hd2900   4096 Oct 10 18:23 .git/
-rw-r--r-- 1 root   root        5 Oct 10 18:05 .gitignore
-rwxrwxr-x 1 hd2900 hd2900     69 Oct 10 18:04 README.md*

Still when I from a browser type https://my-global-IP:81 
<https://myglobalip:81/> I get the permission error.

Best regards,
Jian



> Den 11. okt. 2021 kl. 22.37 skrev Graham Dumpleton 
> <[email protected]>:
> 
> You didn’t use exactly what I gave you. The argument to the Directory 
> directive needs to be the path to the directory holding the WSGI script file, 
> not the name of the mod_wsgi daemon process group.
> 
>         <Directory /var/www/html/flaskapp>
>              WSGIProcessGroup flaskapp
>            Require all granted
>         </Directory>
> 
> Graham
> 
>> On 12 Oct 2021, at 4:19 am, Jian Wu <[email protected] 
>> <mailto:[email protected]>> wrote:
>> 
>> Hello Graham,
>> 
>> Thanks for pointing this out. I have now corrected it so the configuration 
>> file looks as below. The problem however still persists. 
>> 
>> cat /etc/apache2/sites-enabled/000-default.conf 
>> <VirtualHost *:80>
>>      # The ServerName directive sets the request scheme, hostname and port 
>> that
>>      # the server uses to identify itself. This is used when creating
>>      # redirection URLs. In the context of virtual hosts, the ServerName
>>      # specifies what hostname must appear in the request's Host: header to
>>      # match this virtual host. For the default virtual host (this file) this
>>      # value is not decisive as it is used as a last resort host regardless.
>>      # However, you must set it for any further virtual host explicitly.
>>      #ServerName www.example.com <http://www.example.com/>
>> 
>>      ServerAdmin webmaster@localhost
>>      DocumentRoot /var/www/html
>>         WSGIDaemonProcess flaskapp threads=5
>>         WSGIScriptAlias / /var/www/html/flaskapp/flaskapp.wsgi
>>         WSGIApplicationGroup %{GLOBAL}
>> 
>>         <Directory flaskapp>
>>              WSGIProcessGroup flaskapp
>>           Require all granted
>>         </Directory>
>> 
>>      # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
>>      # error, crit, alert, emerg.
>>      # It is also possible to configure the loglevel for particular
>>      # modules, e.g.
>>      #LogLevel info ssl:warn
>> 
>>      ErrorLog ${APACHE_LOG_DIR}/error.log
>>      CustomLog ${APACHE_LOG_DIR}/access.log combined
>> 
>>      # For most configuration files from conf-available/, which are
>>      # enabled or disabled at a global level, it is possible to
>>      # include a line for only one particular virtual host. For example the
>>      # following line enables the CGI configuration for this host only
>>      # after it has been globally disabled with "a2disconf".
>>      #Include conf-available/serve-cgi-bin.conf      
>>      #Header set Access-Control-Allow-Origin "*"
>> </VirtualHost>
>> 
>> Best regards,
>> Jian
>> 
>>> Den 10. okt. 2021 kl. 23.23 skrev Graham Dumpleton 
>>> <[email protected] <mailto:[email protected]>>:
>>> 
>>> For a start, this is wrong:
>>> 
>>>         <Directory flaskapp>
>>>              WSGIProcessGroup flaskapp
>>>              WSGIApplicationGroup %{GLOBAL}
>>>              Order deny,allow
>>>              Allow from all 
>>>         </Directory>
>>> 
>>> It should be:
>>> 
>>>         <Directory /var/www/html/flaskapp>
>>>              WSGIProcessGroup flaskapp
>>>              Require all granted 
>>>         </Directory>
>>> 
>>> Graham
>>> 
>>>> On 11 Oct 2021, at 7:09 am, Jian Wu <[email protected] 
>>>> <mailto:[email protected]>> wrote:
>>>> 
>>>> Dear Graham,
>>>> 
>>>> 
>>>> I am following this guide 
>>>> https://asdkazmi.medium.com/deploying-flask-app-with-wsgi-and-apache-server-on-ubuntu-20-04-396607e0e40f
>>>>  
>>>> <https://asdkazmi.medium.com/deploying-flask-app-with-wsgi-and-apache-server-on-ubuntu-20-04-396607e0e40f>
>>>>  to deploy a flask app together with apache2 and mod-wsgi. My intension is 
>>>> being able to perform a request post call from another server over the 
>>>> internet to my server running flask. 
>>>> 
>>>> It seems that the author suggests to install mod-wsgi using the below 
>>>> command. I am not sure if that package is supported?
>>>> 
>>>> sudo apt-get install libapache2-mod-wsgi-py3
>>>> 
>>>> I followed the instruction, and when I typed in my local IP address on a 
>>>> browser I received a message saying “Forbidden you don’t have the 
>>>> permission to access this ressource Apache 2.4.46 (Ubuntu server at 
>>>> 192.168.0.179 port 80). 
>>>> 
>>>> Hardware: 
>>>> -  Raspberry Pi 4 with Ubuntu 20.04. My local IP is 192.168.0.179
>>>> - Router configuration: As seen in the picture below, I have forwarded 
>>>> port 22 external to internal 22 and external port 81 to internal port 80. 
>>>> <Indsat grafik-1.tiff>
>>>> 
>>>> These ports are opened on my Ubuntu server
>>>> (env) hd2900@hd2900:/etc/apache2/sites-available$ sudo ufw status
>>>> [sudo] password for hd2900: 
>>>> Status: active
>>>> 
>>>> To                         Action      From
>>>> --                         ------      ----
>>>> 22/tcp                     ALLOW       Anywhere                  
>>>> OpenSSH                    ALLOW       Anywhere                  
>>>> Apache Full                ALLOW       Anywhere                  
>>>> 81/tcp                     ALLOW       Anywhere                  
>>>> 22/tcp (v6)                ALLOW       Anywhere (v6)             
>>>> OpenSSH (v6)               ALLOW       Anywhere (v6)             
>>>> Apache Full (v6)           ALLOW       Anywhere (v6)             
>>>> 81/tcp (v6)                ALLOW       Anywhere (v6) 
>>>> 
>>>> My Apache2 configuration file:
>>>> (env) hd2900@hd2900:~/Documents/Python/hd2900TakeawayPrint$ cat 
>>>> /etc/apache2/sites-enabled/000-default.conf
>>>> <VirtualHost *:80>
>>>>    # The ServerName directive sets the request scheme, hostname and port 
>>>> that
>>>>    # the server uses to identify itself. This is used when creating
>>>>    # redirection URLs. In the context of virtual hosts, the ServerName
>>>>    # specifies what hostname must appear in the request's Host: header to
>>>>    # match this virtual host. For the default virtual host (this file) this
>>>>    # value is not decisive as it is used as a last resort host regardless.
>>>>    # However, you must set it for any further virtual host explicitly.
>>>>    #ServerName www.example.com <http://www.example.com/>
>>>> 
>>>>    ServerAdmin webmaster@localhost
>>>>    DocumentRoot /var/www/html
>>>>         WSGIDaemonProcess flaskapp threads=5
>>>>         WSGIScriptAlias / /var/www/html/flaskapp/flaskapp.wsgi
>>>>         WSGIApplicationGroup %{GLOBAL}
>>>> 
>>>>         <Directory flaskapp>
>>>>              WSGIProcessGroup flaskapp
>>>>              WSGIApplicationGroup %{GLOBAL}
>>>>              Order deny,allow
>>>>              Allow from all 
>>>>         </Directory>
>>>> 
>>>>    # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
>>>>    # error, crit, alert, emerg.
>>>>    # It is also possible to configure the loglevel for particular
>>>>    # modules, e.g.
>>>>    #LogLevel info ssl:warn
>>>> 
>>>>    ErrorLog ${APACHE_LOG_DIR}/error.log
>>>>    CustomLog ${APACHE_LOG_DIR}/access.log combined
>>>> 
>>>>    # For most configuration files from conf-available/, which are
>>>>    # enabled or disabled at a global level, it is possible to
>>>>    # include a line for only one particular virtual host. For example the
>>>>    # following line enables the CGI configuration for this host only
>>>>    # after it has been globally disabled with "a2disconf".
>>>>    #Include conf-available/serve-cgi-bin.conf      
>>>>    #Header set Access-Control-Allow-Origin "*"
>>>> </VirtualHost>
>>>> 
>>>> # vim: syntax=apache ts=4 sw=4 sts=4 sr noet
>>>> 
>>>> 
>>>> My Flask app folder structure:
>>>> (env) hd2900@hd2900:~/Documents/Python/hd2900TakeawayPrint$ ls -la
>>>> total 32
>>>> drwxrwxr-x 4 hd2900 hd2900 4096 Oct 10 18:23 .
>>>> drwxrwxr-x 3 hd2900 hd2900 4096 Oct 10 18:04 ..
>>>> drwxrwxr-x 4 hd2900 hd2900 4096 Oct 10 18:08 env
>>>> -rw-rw-r-- 1 hd2900 hd2900  249 Oct 10 18:23 flaskapp.py
>>>> -rw-rw-r-- 1 hd2900 hd2900   96 Oct 10 18:23 flaskapp.wsgi
>>>> drwxrwxr-x 8 hd2900 hd2900 4096 Oct 10 18:23 .git
>>>> -rw-r--r-- 1 root   root      5 Oct 10 18:05 .gitignore
>>>> -rw-rw-r-- 1 hd2900 hd2900   69 Oct 10 18:04 README.md
>>>> 
>>>> flaskapp.wsgi content
>>>> cat flaskapp.wsgi 
>>>> import sys 
>>>> sys.path.insert(0, '/var/www/html/flaskapp')
>>>> 
>>>> Flaskapp.py content
>>>> cat flaskapp.py
>>>> # flaskapp.py
>>>> # This is a "hello world" app sample for flask app. You may have a 
>>>> different file.
>>>> from flask import Flask
>>>> app = Flask(__name__)
>>>> @app.route('/') 
>>>> def hello_world():
>>>>    return 'Hello from Flask!' 
>>>> if __name__ == '__main__':
>>>> 
>>>> I don’t know how to troubleshoot this problem further, and I hope for your 
>>>> advice.
>>>> 
>>>> Thanks in advance!
>>>> 
>>>> Best regards,
>>>> Jian
>>>> 
>>>> -- 
>>>> You received this message because you are subscribed to the Google Groups 
>>>> "modwsgi" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send an 
>>>> email to [email protected] 
>>>> <mailto:[email protected]>.
>>>> To view this discussion on the web visit 
>>>> https://groups.google.com/d/msgid/modwsgi/2BCCBE0B-7ECB-462D-998D-B0048679D76B%40gmail.com
>>>>  
>>>> <https://groups.google.com/d/msgid/modwsgi/2BCCBE0B-7ECB-462D-998D-B0048679D76B%40gmail.com?utm_medium=email&utm_source=footer>.
>>> 
>>> 
>>> -- 
>>> You received this message because you are subscribed to the Google Groups 
>>> "modwsgi" group.
>>> To unsubscribe from this group and stop receiving emails from it, send an 
>>> email to [email protected] 
>>> <mailto:[email protected]>.
>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/modwsgi/DA44D477-D5A6-4843-94BD-D2934DB8F9FE%40gmail.com
>>>  
>>> <https://groups.google.com/d/msgid/modwsgi/DA44D477-D5A6-4843-94BD-D2934DB8F9FE%40gmail.com?utm_medium=email&utm_source=footer>.
>> 
>> 
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "modwsgi" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] 
>> <mailto:[email protected]>.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/modwsgi/85F8B0E7-909C-4FE5-B9E4-EE861298E63A%40gmail.com
>>  
>> <https://groups.google.com/d/msgid/modwsgi/85F8B0E7-909C-4FE5-B9E4-EE861298E63A%40gmail.com?utm_medium=email&utm_source=footer>.
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "modwsgi" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected] 
> <mailto:[email protected]>.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/modwsgi/0736BFAD-F31E-45FF-9083-AEAE4E91E5F4%40gmail.com
>  
> <https://groups.google.com/d/msgid/modwsgi/0736BFAD-F31E-45FF-9083-AEAE4E91E5F4%40gmail.com?utm_medium=email&utm_source=footer>.

-- 
You received this message because you are subscribed to the Google Groups 
"modwsgi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/modwsgi/5D61A066-8FFD-4E2D-864C-A6E9245FAC22%40gmail.com.

Reply via email to